LUA:向表中插入对象会覆盖表的其他成员

我需要在 Lua 中创建一个对象表。但是,当我将一个对象插入到表中时,之前插入的所有成员都会更改值。所有这些对象的哈希代码都是不同的。

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,应该是 10
print(r2.length) -- 50,应该是 20
print(r3.length) -- 50 是 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
点赞
用户107090
用户107090

Rectangle:new 中,

   o.length = length or 0
   o.breadth = breadth or 0
   o.area = length*breadth

当你调用 Rectangle:new() 时,self 将包含 Rectangle

2019-06-07 10:27:42