Module:LuaCall: Difference between revisions
From Test Wiki
Content deleted Content added
p.call() use callWithTonumberOrStringOnPairs() |
Removing commented out or broken code |
||
| Line 6: | Line 6: | ||
local reserved_function,reserved_contents |
local reserved_function,reserved_contents |
||
for k,v in pairs(parent.args or {}) do |
for k,v in pairs(parent.args or {}) do |
||
--if tonumber(v) then v=tonumber(v) end |
|||
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table |
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table |
||
-- debuglog=debuglog..k.."="..v.."</nowiki><br /><nowiki>" |
|||
end |
end |
||
for k,v in pairs(frame.args or {}) do |
for k,v in pairs(frame.args or {}) do |
||
--if tonumber(v) then v=tonumber(v) end |
|||
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table |
_G[k]=tonumber(v) or v -- transfer every parameter directly to the global variable table |
||
end |
end |
||
| Line 36: | Line 33: | ||
if type(reserved_call)~="function" then |
if type(reserved_call)~="function" then |
||
return tostring(reserved_call) |
return tostring(reserved_call) |
||
elseif reserved_debug or not reserved_function then return mw.text.nowiki(debuglog) |
|||
else reserved_output={reserved_call(unpack(reserved_value))} |
else reserved_output={reserved_call(unpack(reserved_value))} |
||
return reserved_output[reserved_return or 1] |
return reserved_output[reserved_return or 1] |
||
| Line 45: | Line 41: | ||
return tonumber(v) or v:gsub("^\\", "", 1) |
return tonumber(v) or v:gsub("^\\", "", 1) |
||
end |
end |
||
--local function tonumberOrStringOnPairs(...) |
|||
-- local args = {} |
|||
-- for _, v in ... do |
|||
-- --table.insert(args, tonumber(v) or v:gsub("^\\", "", 1)) |
|||
-- table.insert(args, tonumberOrString(v)) |
|||
-- end |
|||
-- return args |
|||
--end |
|||
local function callWithTonumberOrStringOnPairs(f, ...) |
local function callWithTonumberOrStringOnPairs(f, ...) |
||
| Line 146: | Line 133: | ||
--]] |
--]] |
||
function p.call(frame) |
function p.call(frame) |
||
----local f = mw.text.trim(frame.args[1], '%s') |
|||
----local args = {} |
|||
----for _, v in ipairsAtOffset(frame.args, 1) do |
|||
---- --table.insert(args, tonumber(v) or v:gsub("^\\", "", 1)) |
|||
---- table.insert(args, tonumberOrString(v)) |
|||
----end |
|||
--local args = tonumberOrStringOnPairs(ipairsAtOffset(frame.args, 1)) |
|||
----local G = _G |
|||
----for _ in mw.text.gsplit( |
|||
---- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*' |
|||
----) do |
|||
---- G = G[_] |
|||
----end |
|||
--return (get(frame.args[1])(unpack(args))) |
|||
return callWithTonumberOrStringOnPairs(get(frame.args[1]), |
return callWithTonumberOrStringOnPairs(get(frame.args[1]), |
||
ipairsAtOffset(frame.args, 1) |
ipairsAtOffset(frame.args, 1) |
||
| Line 191: | Line 164: | ||
-- 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( |
|||
-- mw.text.trim(frame.args[1], '%s'), '%s*%.%s*' |
|||
--) do |
|||
-- G = G[_] |
|||
--end |
|||
--return G |
|||
return get(frame.args[1]) |
return get(frame.args[1]) |
||
else |
else |
||
--local args = {} |
|||
local G = _G |
local G = _G |
||
for _, v in ipairs(frame.args) do |
for _, v in ipairs(frame.args) do |
||
--table.insert(args, tonumber(v) or v:gsub("^\\", "", 1)) |
|||
--G = G[tonumber(v) or v:gsub("^\\", "", 1)] |
|||
G = G[tonumberOrString(v)] |
G = G[tonumberOrString(v)] |
||
end |
end |
||
--local G = _G; for _, v in ipairs(args) do |
|||
-- G = G[v] |
|||
--end |
|||
return G |
return G |
||
end |
end |
||