lua - 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, 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
self
将包含Rectangle
当您调用Rectangle:new()
.
推荐阅读
- node.js - 在没有回调函数的 URL 中获取参数
- html - How to apply rvest to a dataframe column of HTML to make a column of extracted emboldened words
- powerapps - PowerAutomate Flow 在 PowerApps 编辑器中工作,但不能从 PowerApps 平板电脑应用程序启动
- overriding - Prestashop 1.7.7.1:覆盖控制器
- r - 为值向量编写 R 函数
- python - 如何返回在函数 A 中定义的列表以在 python 中的函数 B 中使用?
- r - 转向凌乱的数据
- python - 如何正确扭曲python中的文档图像?
- angular - 应用模块中的 Angular 动态 forRoot 值(基于 api)
- javascript - 电子邮件验证仅在表单中接受两个点