Module:LuaCall: Difference between revisions
From Test Wiki
Content deleted Content added
This module is complicated enough as is. You don't need to add even more tangential functions, when p.call was working perfectly fine for months |
auto converting argument to number often lead to bug, ex. {{#invoke:LuaCall|call|mw.text.nowiki|0001}}, p.call_s is easier for user to use (and tend to produce less bug) than p.call when all argument is to be string |
||
| Line 42: | Line 42: | ||
end |
end |
||
local function |
local function pairs2ArrayWithFunc(f, ...) |
||
local args = {} |
local args = {} |
||
for _, v in ... do |
for _, v in ... do |
||
table.insert(args, |
table.insert(args, f(v)) |
||
end |
end |
||
return |
return args |
||
end |
|||
local function pairs2Array(...) |
|||
local args = {} |
|||
for _, v in ... do |
|||
table.insert(args, v) |
|||
end |
|||
return args |
|||
end |
end |
||
| Line 71: | Line 79: | ||
end |
end |
||
return G |
return G |
||
end |
|||
local function call(s, args, ret) |
|||
if ret then |
|||
return ({get(s)(unpack(args))})[tonumber(ret)] |
|||
end |
|||
return get(s)(unpack(args)) |
|||
end |
end |
||
| Line 98: | Line 113: | ||
--]] |
--]] |
||
function p.call(frame) |
function p.call(frame) |
||
return |
return call(frame.args[1], |
||
ipairsAtOffset(frame.args, 1) |
pairs2ArrayWithFunc(tonumberOrString, ipairsAtOffset(frame.args, 1)), |
||
frame.args['return'] |
|||
) |
|||
end |
|||
--[[ |
|||
------------------------------------------------------------------------------------ |
|||
-- call_n |
|||
-- |
|||
-- Like call(), but passing all arguments as number |
|||
------------------------------------------------------------------------------------ |
|||
--]] |
|||
function p.call_n(frame) |
|||
return call(frame.args[1], |
|||
pairs2ArrayWithFunc(tonumber, ipairsAtOffset(frame.args, 1)), |
|||
frame.args['return'] |
|||
) |
|||
end |
|||
--[[ |
|||
------------------------------------------------------------------------------------ |
|||
-- call_s |
|||
-- |
|||
-- Like call(), but passing all arguments as string (no conversion) |
|||
------------------------------------------------------------------------------------ |
|||
--]] |
|||
function p.call_s(frame) |
|||
-- unpack() not work on metatable |
|||
-- enclosing result in (), so that it will return only 1st element of result |
|||
--return (get(frame.args[1])(unpack(frame.args, 2))) |
|||
return call(frame.args[1], |
|||
pairs2Array(ipairsAtOffset(frame.args, 1)), |
|||
frame.args['return'] |
|||
) |
) |
||
end |
end |
||