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*'
-- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*'
) do
--) do
G = G[_]
-- G = G[_]
end
--end
return (G(unpack(args)))
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 = {}