Lua 在循环中创建对象表时出现问题。表中的每一项都是最后一项!卢阿
所以我创建了一个示例程序来演示一个我无法共享的真实程序 我的示例程序有一个Lua 在循环中创建对象表时出现问题。表中的每一项都是最后一项!卢阿,lua,Lua,所以我创建了一个示例程序来演示一个我无法共享的真实程序 我的示例程序有一个Float对象。Float对象包含整数端和小数端 我有一个循环,将创建10个浮点数,并将它们添加到数字表中 当我打印出数字表时,其中的任何一项都是创建的最后一项。我当然希望每个项目都是自己的 我觉得这个错误是由于Lua的对象传递引用模型造成的,我必须正确设置“类” 示例代码: -- Float class Float = { int = 0, decimal = 0 } function Float:new(o, i,
Float
对象。Float对象包含整数端和小数端
我有一个循环,将创建10个浮点数,并将它们添加到数字表中
当我打印出数字表时,其中的任何一项都是创建的最后一项。我当然希望每个项目都是自己的
我觉得这个错误是由于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
预期输出(但自pairs()函数起顺序错误):
Float:new(nil,i,i)
中的self
指的是Float
,而不是o
所以,使用
o.int = i
o.decimal = d
而不是
self.int = i
self.decimal = d
self.int = i
self.decimal = d