2013-03-25 1 views
1

모든 숫자 항목에 대해 무언가를하는 가변 개수의 인수를 사용하여 함수를 작성하려고했습니다. 내가이 프로그램을 실행할 때, 그것은 바로 첫 번째 숫자가 아닌 인수에 중지가변 개수의 인수를 사용하여 루아 함수의 인수를 처리하는 중

function luaFunc (...) 
    for i,v in ipairs{...} do 
     if type(v)=='number' then 
     --do something 
     end 
    end 
end 

하지만, 그래서 나는 이런 식으로 뭔가를 내놓았다. 뭐가 문제 야?

+3

이되지 않은 첫 번째 숫자 인수의 첫번째 전무 인수에서 멈 춥니 다. – lhf

+0

그게 맞아, 고마워. – VahidM

+1

ipairs 용 문서를 읽는다면 구체적으로 알려줍니다. 나는 당신이 여기에서 찾고있는 것이'pairs' 함수라고 생각합니다. 이것은 테이블의 모든 키를 반복합니다 (반드시 순서는 아님). –

답변

1
local function luaFunc (...) 
    for i = 1, select('#',...) do 
     local v = select(i,...) 
     if type(v)=='number' then 
     --do something 
     print(v) 
     end 
    end 
end 
luaFunc (1,'a',nil,2)  ] 

-- Output 
1 
2 
+0

잘 작동합니다. 감사합니다. – VahidM

1

시도는이 :

function luaFunc (...) 
    local t=table.pack(...) 
    for i=1,t.n do 
     local v=t[i] 
     if type(v)=='number' then 
     print(i,v) 
     end 
    end 
end 

luaFunc(10,20,"hello",40,nil,60,print,99) 
+0

도 유용합니다. 고맙습니다. btw 왜 ipairs와 반복이 작동하지 않아야합니까? 요소는 키를 가지며 아무 값도 가지지 않습니다. – VahidM

+1

@VahidM,'ipairs'는 테이블에'# '연산자를 사용하여 요소의 수를 결정하지만'# '은 구멍이있는 테이블에 유용하지 않습니다 (nil 항목). – lhf

+0

난 그냥 nil 항목이있는 테이블에 대해 # 연산자를 테스트했는데 정상적으로 작동했습니다. 그것은 다른 것임에 틀림 없다. 어쨌든 고마워. – VahidM