1

2 つの環境で動作する必要があるコマンド ハンドラーに取り組んでいます。以下は、私が取り組んでいる機能のごく一部であり、問​​題を捉えていると思います。少なくとも、対処する必要があるエラー メッセージが表示されます。

ライブ環境である Fibaro Home center 2 では、表に示されているコマンド セットを を使用して 1 つずつ実行する必要があり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機能するかについて私が理解していないことは何ですか?

4

1 に答える 1