gpt4 book ai didi

Lua 类保留旧值

转载 作者:行者123 更新时间:2023-12-04 18:27:19 24 4
gpt4 key购买 nike

我是 Lua 的新手,所以我确定我遗漏了一些东西,但我有这个类(class),它似乎表现出意外。

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

我在这里错过了什么?

最佳答案

这里的问题在于您的 Item:new 函数不断修改同一个表:Item (self in the context of 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

关于Lua 类保留旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com