将数组传递给函数时出错(Lua)

时间:2013-12-20 17:00:11

标签: arrays lua

我收到此错误:尝试索引字段'array'(一个nil值),这是我的代码:

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

1 个答案:

答案 0 :(得分: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

或者,作为匿名函数,可能存储在变量而不是表

(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)