我是Lua的新手所以我确定我错过了一些东西,但是我有这个课程,而且看起来似乎出乎意料。
Item = {elm = nil, __index = {}}
function Item:new(obj)
setmetatable({}, Item)
self.elm = obj.elm
return self
end
function Item:collectItem()
print(self.elm);
end
local itm = Item:new{elm = "val1"}
local itm2 = Item:new{elm = "val2"}
itm:collectItem()
itm2:collectItem()
输出:
>val2
>val2
我期待的时候:
VAL1 val2的
我在这里缺少什么?
答案 0 :(得分:2)
这里的问题是你的Item:new
函数不断修改同一个表:self
上下文中的项Item:new
。您要做的是为您创建的每个新Item对象创建一个新表。这是一种可以做到这一点的方法:
Item = {elm = nil}
function Item:new(obj)
-- Create a new table whose metatable's __index is the Item table
local instance = setmetatable({}, {
__index = self
})
-- Modify the new table, not Item (self)
instance.elm = obj.elm
-- Return the new object
return instance
end