2014-11-22 4 views
1

나는 소수의 배열을 Lua의 단일 배열로 결합하려고합니다. 이 스크립트를 실행할 때 arg.n = nil 값으로 인해 오류가 발생하여 arg.n에 매개 변수의 수가 함수로 전송되지 않아야하며 각각을 반복해야합니다.Lua-arg.n 오류에서 하나의 배열로 몇 개의 배열을 결합하십시오.

어떤 조언이 필요합니까?

function array_concat(...) 

-- Combine Multiple Arrays 
-- Usage: combined = array_concat(T1, T2, T3 ....) 

    local t = {} 


    -- [ERROR] 10:26:35: line 49: attempt to get length of global 'arg' (a nil value) 
    print (arg.n) 
    -- arg.n is nil why ? 


    for i = 1, arg.n do 
     local array = arg[i] 
     if (type(array) == "table") then 
      for j = 1, #array do 
       t[#t+1] = array[j] 
      end 
     else 
      t[#t+1] = array 
     end 
    end 

    return t 
end 


local Array1 = {1,2} 
local Array2 = {3,4} 


local Combine = array_concat(Array1, Array2) 


for k, v in pairs(Combine) do 
    print(k, v) 
end 

답변

3

코드는 이전 버전의 Lua에서 작동합니다.

루아 5.2에서 가변 값 기능을 더 이상 처리하지 않기 위해 arg. 대신 명령 행 인수를 저장하는 전역 변수입니다.

는 가변 기능을 처리 같은 ...를 사용하려면 다음 중 하나를, 더 이상 테이블의 길이를 얻을 수

function foo(...) 
    for k, v in ipairs{...} do 
    --process 
    end 
end 

n 필드를 사용하지 않습니다. 시퀀스 t의 길이를 얻으려면 #t을 사용하십시오.

+1

또는 더 나은 :'i = 1, select ('#', ...) 로컬 v = select (i, ...) - [[process]] end' – siffiejoe

+0

'local arg = table.pack (...)'이라고 말할 수 있습니다. – CHlM3RA