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() |
|||
| ⚫ | |||
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 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 |
||