Module:LuaCall: Difference between revisions

From Test Wiki
Content deleted Content added
Inlining single-use functions
+p.invoke()
Line 40: Line 40:
local function tonumberOrString(v)
local function tonumberOrString(v)
return tonumber(v) or v:gsub("^\\", "", 1)
return tonumber(v) or v:gsub("^\\", "", 1)
end

local function callWithTonumberOrStringOnPairs(f, ...)
local args = {}
for _, v in ... do
table.insert(args, tonumberOrString(v))
end
return (f(unpack(args)))
end

--[[
------------------------------------------------------------------------------------
-- ipairsAtOffset

-- This is an iterator for arrays. It can be used like ipairs, but with
-- specified i as first index to iterate. i is an offset from 1
--
------------------------------------------------------------------------------------
--]]
local function ipairsAtOffset(t, i)
local f, s, i0 = ipairs(t)
return f, s, i0+i
end
end


Line 74: Line 96:
--]]
--]]
function p.call(frame)
function p.call(frame)
local func = get(frame.args[1])
return callWithTonumberOrStringOnPairs(get(frame.args[1]),
ipairsAtOffset(frame.args, 1)
local args = {}
)
for n, v in ipairs(frame.args) do
if n > 1 then
table.insert(args, tonumberOrString(v))
end
end
return func(unpack(args))
end
end


--local TableTools = require('Module:TableTools')
--[[
--[[
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
Line 113: Line 131:
return G
return G
end
end
end

--[[
------------------------------------------------------------------------------------
-- invoke
--
------------------------------------------------------------------------------------
--]]
function p.invoke(frame)
frame.args = frame:getParent().args
local func = require('Module:' .. frame.args[1])[frame.args[2]]
local args = {}
for _, v in ipairsAtOffset(frame.args, 2) do
table.insert(args, v)
end
frame.args = args
return func(frame)
end
end