Module:LuaCall: Difference between revisions
From Test Wiki
Content deleted Content added
p.get() fix bug |
+iIterators*(), use local get(s) for p.call()/p.get() |
||
| Line 98: | Line 98: | ||
return f, s, i0+i |
return f, s, i0+i |
||
end |
end |
||
local function iIteratorsAtOffset(t, i) |
|||
local f, s, i0 = ipairs(t) |
|||
return function (s, i) |
|||
local i, v = f(s, i); return v |
|||
end, s, i0+i |
|||
end |
|||
-- like ipairs() except that it return only value, rather than key/value pair |
|||
-- on each iteration |
|||
local function iIterators(t) return iIteratorsAtOffset(t, 0) end |
|||
local function getArgs() |
local function getArgs() |
||
| Line 105: | Line 116: | ||
end |
end |
||
return args |
return args |
||
end |
|||
local function get(s) |
|||
local G = _G; for _ in mw.text.gsplit( |
|||
mw.text.trim(s, '%s'), '%s*%.%s*' |
|||
) do |
|||
G = G[_] |
|||
end |
|||
return G |
|||
end |
end |
||
| Line 123: | Line 143: | ||
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1)) |
table.insert(args, tonumber(v) or v:gsub("^\\", "", 1)) |
||
end |
end |
||
local G = _G |
--local G = _G |
||
for _ in mw.text.gsplit( |
--for _ in mw.text.gsplit( |
||
-- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*' |
|||
) do |
--) do |
||
-- G = G[_] |
|||
end |
--end |
||
return ( |
return (get(frame.args[1])(unpack(args))) |
||
end |
end |
||
| Line 154: | Line 174: | ||
-- always treat it as string, |
-- always treat it as string, |
||
-- so 'obj.1' will mean obj['1'] rather obj[1] |
-- so 'obj.1' will mean obj['1'] rather obj[1] |
||
local G = _G; for _ in mw.text.gsplit( |
--local G = _G; for _ in mw.text.gsplit( |
||
mw.text.trim(frame.args[1], '%s'), '%s*%.%s*' |
-- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*' |
||
) do |
--) do |
||
G = G[_] |
-- G = G[_] |
||
end |
--end |
||
return G |
--return G |
||
return get(frame.args[1]) |
|||
else |
else |
||
local args = {} |
local args = {} |
||