LUA:将对象插入 table 会覆盖 table 的其他成员
LUA: Insert object to a table overrides other members of table
我需要在 Lua 中创建 table 个对象。
但是当我将对象插入 table 之前插入的所有成员都会更改值。所有这些对象的哈希码都不同
Rectangle = {area = 0, length = 0, breadth = 0}
function Rectangle:new (o,length,breadth)
o = o or {}
setmetatable(o, self)
self.__index = self
self.length = length or 0
self.breadth = breadth or 0
self.area = length*breadth;
return o
end
foo = {}
r1 = Rectangle:new(nil, 10, 10);
table.insert(foo,r1)
r2 = Rectangle:new(nil, 20, 20);
table.insert(foo, r2)
r3 = Rectangle:new(nil, 50, 50);
table.insert(foo, r3)
print(r1.length) -- 50, should be 10
print(r2.length) -- 50, should be 20
print(r3.length) -- 50 is 50
如何在不影响其他成员的情况下插入对象?
我在网上搜索过,我认为这是在 5.2 中修复的。但是我需要使用 5.1.
谁能帮忙,谢谢
已解决
Rectangle = {area = 0, length = 0, breadth = 0}
function Rectangle:new (o,length,breadth)
o = o or {}
o.length = length or 0
o.breadth = breadth or 0
o.area = length*breadth
setmetatable(o, self)
self.__index = self
return o
end
在Rectangle:new
中做
o.length = length or 0
o.breadth = breadth or 0
o.area = length*breadth
当您调用 Rectangle:new()
. 时,self
将包含 Rectangle
我需要在 Lua 中创建 table 个对象。 但是当我将对象插入 table 之前插入的所有成员都会更改值。所有这些对象的哈希码都不同
Rectangle = {area = 0, length = 0, breadth = 0}
function Rectangle:new (o,length,breadth)
o = o or {}
setmetatable(o, self)
self.__index = self
self.length = length or 0
self.breadth = breadth or 0
self.area = length*breadth;
return o
end
foo = {}
r1 = Rectangle:new(nil, 10, 10);
table.insert(foo,r1)
r2 = Rectangle:new(nil, 20, 20);
table.insert(foo, r2)
r3 = Rectangle:new(nil, 50, 50);
table.insert(foo, r3)
print(r1.length) -- 50, should be 10
print(r2.length) -- 50, should be 20
print(r3.length) -- 50 is 50
如何在不影响其他成员的情况下插入对象? 我在网上搜索过,我认为这是在 5.2 中修复的。但是我需要使用 5.1.
谁能帮忙,谢谢
已解决
Rectangle = {area = 0, length = 0, breadth = 0}
function Rectangle:new (o,length,breadth)
o = o or {}
o.length = length or 0
o.breadth = breadth or 0
o.area = length*breadth
setmetatable(o, self)
self.__index = self
return o
end
在Rectangle:new
中做
o.length = length or 0
o.breadth = breadth or 0
o.area = length*breadth
当您调用 Rectangle:new()
. 时,self
将包含 Rectangle