我正在处理需要在两个环境中工作的命令处理程序。下面是我正在处理的函数的一小部分,我认为它可以解决问题。至少,我收到了我需要的错误消息。
在实时环境中,一个Fibaro Home中心2,表中给出的命令集应该使用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
的工作原理?
答案 0 :(得分:1)
在Lua 5.1中不推荐为vararg函数自动创建arg
表,在Lua 5.2中将其删除。
简单地使用
function callFunc(...)
print(...)
end
如果您需要桌子,请使用
function callFunc(...)
local arg={...}
print(unpack(arg))
end