2013-12-20 45 views
0

我得到這個錯誤:試圖索引字段「數組」(一個零值),這是我的代碼:誤差傳遞數組給一個函數(LUA)

aUItems = {}  
    aUItems[1] = tonumber(result[1].item_1) 
    aUItems[2] = tonumber(result[1].item_2) 
    aUItems[3] = tonumber(result[1].item_3) 
    aUItems[4] = tonumber(result[1].item_4) 
    aUItems[5] = tonumber(result[1].item_5) 
    aUItems[6] = tonumber(result[1].item_6) -- Everything here is right, I checked it! 
Network:Send(player, "UpdateAmount", aUItems) -- Basicly calls the function 

--function 
function GK7Inv:UpdateAmount(array) 
aItemsa[1] = array[1] 
aItemsa[2] = array[2] 
aItemsa[3] = array[3] 
aItemsa[4] = array[4] 
aItemsa[5] = array[5] 
aItemsa[6] = array[6] 
end 
+0

你期待'網:Send'沿'aUIItems'進入'GK7Inv:UpdateAmount'?似乎並非如此。 – greatwolf

+0

是的。當我傳遞類似數字的東西而不是aUItems(ofc我在這種情況下更改函數)時,它工作正常。 – nn3112337

+0

@ user3112337您可以發佈網絡代碼:發送? – prmottajr

回答

0

,關鍵是你如何調用的功能,這是我們沒有看到尚未...

當你定義功能的方法(通過使用:代替.),它有一個名爲self一個隱含的第一個參數。當你給它打電話時,你必須傳遞self的值,這通常被隱含地稱爲。如果你不這樣做,那麼你的形式參數將不會與你的實際參數一致。 Lua允許函數調用傳遞任意數量的參數,而不考慮形式參數的數量。默認值是nil

所以,一定要叫這樣的方法:

GK7Inv:UpdateAmount(aUItems) 
-- formal parameter self has the same value as GK7Inv 
-- formal parameter array has the same value as aUItems 

,而不是像這樣:

GK7Inv.UpdateAmount(aUItems) 
-- formal parameter self has the same value as aUItems 
-- formal parameter array has the default value nil 

當然,你不必定義函數的方法,在這種情況下,你將它定義和使用.

function GK7Inv.UpdateAmount(array) 
-- ... 
end 

調用它,或者作爲一個匿名functi上,可能存儲在一個變量,而不是一臺

(function (array) -- don't store the function value, just it as an expression called as a function 
-- ... 
end)(aUItems) 

function UpdateAmount(array) -- store the function value in a global variable 
-- ... 
end 
UpdateAmount(aUItems) 

local function UpdateAmount(array) -- store the function value in a local variable 
-- ... 
end 
UpdateAmount(aUItems) 
+0

哇,這真的是大聲笑。謝謝,多麼愚蠢的錯誤 – nn3112337