在循环中创建对象表时遇到问题。表中的每个项目都是最后一项! LUA

时间:2018-04-03 01:49:22

标签: lua

所以我创建了一个示例程序来说明我无法分享的真实程序。

我的示例程序有一个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

1 个答案:

答案 0 :(得分:1)

self中的{p> Float:new(nil,i,i)引用Float,而不是o

所以,使用

o.int = i
o.decimal =  d

而不是

self.int = i
self.decimal =  d