Module:LuaCall: Difference between revisions

From Test Wiki
Content deleted Content added
p.call() fix bug
+p.get()
Line 97: Line 97:
local f, s, i0 = ipairs(t)
local f, s, i0 = ipairs(t)
return f, s, i0+i
return f, s, i0+i
end

local function getArgs()
local args = {}
for _, v in ipairsAtOffset(frame.args, 1) do
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
end
return args
end
end


Line 104: Line 112:
--
--
-- Example:
-- Example:
-- {{#invoke:LuaCall|call|mw.log|a|1|2|3}} will return mw.log('a', 1, 2, 3)
-- {{#invoke:LuaCall|call|mw.log|a|1|2|3}} will return results of mw.log('a', 1, 2, 3)
-- {{#invoke:LuaCall|call|mw.logObject|a|321}} will return mw.logObject('a', 321)
-- {{#invoke:LuaCall|call|mw.logObject|a|321}} will return results of mw.logObject('a', 321)
--
--
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
--]]
--]]
function p.call(frame)
function p.call(frame)
local args = {}
--local f = mw.text.trim(frame.args[1], '%s')
--local f = mw.text.trim(frame.args[1], '%s')
local args = {}
for _, v in ipairsAtOffset(frame.args, 1) do
for _, v in ipairsAtOffset(frame.args, 1) do
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
Line 122: Line 130:
end
end
return (G(unpack(args)))
return (G(unpack(args)))
end

local TableTools = require('Module:TableTools')
--[[
------------------------------------------------------------------------------------
-- get
--
-- Example:
-- {{#invoke:LuaCall|get| math.pi }} will return value of math.pi
-- {{#invoke:LuaCall|get|math|pi}} will return value of math.pi
-- {{#invoke:LuaCall|get| math |pi}} will return value of _G[' math '].pi
-- {{#invoke:LuaCall|get|_G| math.pi }} will return value of _G[' math.pi ']
-- {{#invoke:LuaCall|get|obj.a.5.c}} will return value of obj.a['5'].c
-- {{#invoke:LuaCall|get|obj|a|5|c}} will return value of obj.a[5].c
--
------------------------------------------------------------------------------------
--]]
function p.get(frame)
local argsIpairs
-- #frame.args always return 0, regardless of number of unnamed
-- template parameters, so use length() instead
if TableTools.length(frame.args) == 1 then
-- not do tonumber() for this args style,
-- always treat it as string,
-- so 'obj.1' will mean obj['1'] rather obj[1]
argsIpairs = mw.text.gsplit(
mw.text.trim(frame.args[1], '%s'), '%s*%.%s*'
)
else
local args = {}
for _, v in ipairs(frame.args) do
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1))
end
argsIpairs = ipairs(frame.args)
end
local G = _G; for _ in argIpairs do G = G[_] end
return G
end
end