Lua 中本地函数中的灵活参数展开

我正在处理一个需要在两个环境中工作的命令处理程序。下面是我正在处理的函数的一小部分,我认为它捕捉了问题。至少,我得到了需要解决的错误消息。

在现场环境中,一个Fibaro Home center 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命令行中尝试这样做时

> 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如何工作的问题。

点赞
用户107090
用户107090

自动创建 arg 表格用于可变参数函数在 Lua 5.1 中已被弃用,并在 Lua 5.2 中已被移除。

使用简单的代码:

function callFunc(...)
    print(...)
end

如果您需要一个表格,请使用以下代码:

function callFunc(...)
    local arg={...}
    print(unpack(arg))
end
2017-01-18 09:30:58