2017-01-18 2 views
1

두 환경에서 작동해야하는 명령 처리기에서 일하고 있습니다. 아래는 내가 작업하고있는 함수의 작은 부분이며 문제를 파악한다고 생각합니다. 적어도 내가 주소를 지정하라는 오류 메시지가 표시됩니다.Lua 유연한 함수 인수 로컬 함수에서 풀기

라이브 환경에서 Fibaro 홈 센터 2는 호출에 따라 2-337 개의 인수를 취하는 fibaro:call을 사용하여 테이블에서 주어진 명령 세트를 하나씩 실행해야합니다.

개발 중에 나는 발행 된 명령을 인쇄하기 위해 print 함수를 대신 사용합니다. 내가 어떻게 unpack 작품에 대해 이해하고 있지 않다 무엇

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 ? 

: 나는 루아 명령 쉘

> c= {} 
> c[1] = {1,"turnOn"} 
> c[2] = {1,"setValue",10} 
> movementHandler(10,c,c) 

이를하려고 할 때

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; 

그러나,이 출력을 얻을?

답변

1

vararg 함수에 대한 arg 테이블의 자동 생성이 Lua 5.1에서 더 이상 사용되지 않으며 Lua 5.2에서 제거되었습니다. 테이블을해야하는 경우

사용은 단순히

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

,

function callFunc(...) 
    local arg={...} 
    print(unpack(arg)) 
end 
+0

환상적인를 사용! 나는 루아 세계에서 "기능적으로 부족함"과 같은 것을 알아 차리기에 충분하지 않습니다. 부끄러운 줄 알아. :-) 고맙습니다! –

+0

@Fredrik 루아 랜드는 멋진 위치입니다 :) – warspyking

+0

@warspyking - 루아 랜드는 "어두운 구석"을 가지고 있습니다. 그 동물 군은 초보자 증오 동물들이 뛰어 다니고 있습니다. –