所以我创建了一个示例程序来说明我无法分享的真实程序。
我的示例程序有一个Float
对象。 Float对象包含整数边和小数边。
我有一个循环,它将创建10个Floats并将它们添加到数字表中。
当我打印出数字表时,其中的任何项目都是最后创建的项目。我当然希望每件物品都是自己的。
我觉得这个错误是因为Lua的对象传递参考模型,我不能拥有'类'设置正确。
示例代码:
-- Float class
Float = { int = 0, decimal = 0 }
function Float:new(o, i, d)
o = o or {}
setmetatable(o, self)
self.__index = self
self.int = i
self.decimal = d
return o
end
function Float:print()
print(self.int.."."..self.decimal)
end
-- Float class end
-- driver code
numbers = {}
function main()
for i = 0, 10, 1 do
-- this weird indexing is because in my real program I will be indexing w/ a string so I wanted to mimic that
numbers["a"..i] = Float:new(nil, i, i)
end
for k,v in pairs(numbers) do
print(v:print())
end
end
main()
输出:
10.10
10.10
10.10
10.10
10.10
10.10
10.10
10.10
10.10
10.10
10.10
预期输出(但由于pair()函数不正常):
1.1
2.2
3.3
4.4
5.5
6.6
7.7
8.8
9.9
10.10
答案 0 :(得分:1)
self
中的{p> Float:new(nil,i,i)
引用Float
,而不是o
。
所以,使用
o.int = i
o.decimal = d
而不是
self.int = i
self.decimal = d