2014-11-22 92 views
1

我想將幾個數組合併成一個在Lua中的單數組。 當我運行這個腳本我得到錯誤,由於arg.n = nil值,應該不是arg.n有參數發送到一個函數的數量,需要循環每個在Lua中將幾個數組合併成一個數組 - arg.n error

任何意見?

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中工作。

在Lua 5.2中,arg不再用於處理可變參數函數。相反,它是存儲命令行參數的全局變量。

要處理可變參數的功能,使用...這樣的:

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

n字段不用於獲得表長度的任何更多的,無論是。使用#t來獲得序列的長度t

+1

甚至更​​好:'對於i = 1,選擇('#',...)做本地v =選擇(i,...) - [[process]]結束' – siffiejoe 2014-11-22 09:44:55

+0

要做到這一點你可以說'local arg = table.pack(...)'。 – CHlM3RA 2014-11-24 07:56:52

相關問題