Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 在循环中创建对象表时出现问题。表中的每一项都是最后一项!卢阿_Lua - Fatal编程技术网

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