Lua Class保留旧的价值观

时间:2014-03-27 22:33:02

标签: lua

我是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的

我在这里缺少什么?

1 个答案:

答案 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