Lua 在本地函数中灵活的函数参数解包
Lua flexible function argument unpacking in local function
我正在研究需要在两个环境中工作的命令处理程序。下面是我正在处理的功能的一小部分,我认为它抓住了问题。至少,我收到了我需要解决的错误消息。
在现场环境中,Fibaro Home center 2,table 中给出的命令集应该使用 fibaro:call
一个接一个地执行,它需要 2-3 个参数,具体取决于调用。
在开发过程中,我改为使用 print
函数来打印本应发出的命令。
function movementHandler(movementSendorId,onTable)
local offTable = offTable or {};
local onTable = onTable or {};
if (fibaro or {}).call then
function callFunc(...) ;
return fibaro:call(...);
end;
else
function callFunc(...)
print(unpack(arg));
end;
end;
if onTable ~= {} then
for i,command in pairs(onTable) do
callFunc(unpack(command));
end;
end;
end;
但是,当我在 Lua 命令中尝试此操作时 shell
> c= {}
> c[1] = {1,"turnOn"}
> c[2] = {1,"setValue",10}
> movementHandler(10,c,c)
,我得到这个输出:
stdin:10: bad argument #1 to 'unpack' (table expected, got nil)
stack traceback:
[C]: in function 'unpack'
stdin:10: in function 'callFunc'
stdin:15: in function 'movementHandler'
stdin:1: in main chunk
[C]: in ?
我不了解 unpack
的工作原理?
arg
table 可变参数函数的自动创建已在 Lua 5.1 中弃用并在 Lua 5.2 中删除。
简单使用
function callFunc(...)
print(...)
end
如果您需要table,请使用
function callFunc(...)
local arg={...}
print(unpack(arg))
end
我正在研究需要在两个环境中工作的命令处理程序。下面是我正在处理的功能的一小部分,我认为它抓住了问题。至少,我收到了我需要解决的错误消息。
在现场环境中,Fibaro Home center 2,table 中给出的命令集应该使用 fibaro:call
一个接一个地执行,它需要 2-3 个参数,具体取决于调用。
在开发过程中,我改为使用 print
函数来打印本应发出的命令。
function movementHandler(movementSendorId,onTable)
local offTable = offTable or {};
local onTable = onTable or {};
if (fibaro or {}).call then
function callFunc(...) ;
return fibaro:call(...);
end;
else
function callFunc(...)
print(unpack(arg));
end;
end;
if onTable ~= {} then
for i,command in pairs(onTable) do
callFunc(unpack(command));
end;
end;
end;
但是,当我在 Lua 命令中尝试此操作时 shell
> c= {}
> c[1] = {1,"turnOn"}
> c[2] = {1,"setValue",10}
> movementHandler(10,c,c)
,我得到这个输出:
stdin:10: bad argument #1 to 'unpack' (table expected, got nil)
stack traceback:
[C]: in function 'unpack'
stdin:10: in function 'callFunc'
stdin:15: in function 'movementHandler'
stdin:1: in main chunk
[C]: in ?
我不了解 unpack
的工作原理?
arg
table 可变参数函数的自动创建已在 Lua 5.1 中弃用并在 Lua 5.2 中删除。
简单使用
function callFunc(...)
print(...)
end
如果您需要table,请使用
function callFunc(...)
local arg={...}
print(unpack(arg))
end