Module:LuaCall: Difference between revisions

From Test Wiki
Content deleted Content added
call()
p.call() use ipairsAtOffset()
Line 58: Line 58:


return p
return p
end

-- ipairsAt()/ipairsAtOffset() is pending to be placed in [[Module:TableTools]]
--[[
------------------------------------------------------------------------------------
-- ipairsAt
--
-- This is an iterator for arrays. It can be used like ipairs, but with
-- specified i as first index to iterate.
--
-- for i,v in p.ipairsAt(t, 3) do body end
--
-- will iterate over the pairs (3,t[3]),(4,t[4]),..., up to the first
-- integer key absent from the table.
--
-- Note: The following is an example to do range iteration from 3 to j
--
-- for i,v in p.ipairsAt(t, 3) do if i>j then break end; body end
--
------------------------------------------------------------------------------------
--]]
local function ipairsAt(t, i)
--return ipairsAtOffset(t, i-1)
-- This may be less overhead than return ipairsAtOffset() above
local f, s, i0 = ipairs(t)
return f, s, i0+i-1
end

--[[
------------------------------------------------------------------------------------
-- ipairsAtOffset
--
-- Like ipairsAt(), except that it treat argument i as offset from 1
--
------------------------------------------------------------------------------------
--]]
local function ipairsAtOffset(t, i)
local f, s, i0 = ipairs(t)
return f, s, i0+i
end
end


Line 64: Line 103:
local args = {}
local args = {}
local f = frame.args[1]
local f = frame.args[1]
local iter,s,i = ipairs(frame.args)
for _, v in ipairsAtOffset(frame.args, 1) do
for _, v in iter,s,i+1 do
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
end
end