代码之家  ›  专栏  ›  技术社区  ›  niju

生成具有唯一地址的表

  •  0
  • niju  · 技术社区  · 2 年前

    我正试图插入一系列具有函数生成的值的表。我注意到生成的表都有相同的地址,因此在我的程序中只识别最近生成的表。

    下面表示主程序正在从中获取的文件中的代码。

    a.lua

    local a = {}
    local b = {}
    
    b.x = 0
    b.y = 0
    b.z = 'Static'
    
    function a.new(x, y)
        b.x = x
        b.y = y
        return b
    end
    

    以下是如何实现上述代码的示例。

    b.lua

    a = require 'a'
    
    d = {}
    
    table.insert(d, a.new(1, 2))
    table.insert(d, a.new(2, 3))
    

    a.new生成的表都有相同的地址(即0x0000001)。因此,最后一个表.insert覆盖了上一个生成的表,并且“d”表中有各种条目都指向同一位置。

    如何用这种方式生成具有唯一地址的表?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Icesythe7    2 年前

    b需要是这样的吗?或者你可以简单地这样修改a.lua吗?

    local a = {}
    
    function a.new(x, y)
        x = x or 0
        y = y or 0
        local b = {}
        b.x = x
        b.y = y
        b.z = 'Static'
        return b
    end
    -- b.lua
    d = {}
    
    table.insert(d, a.new(1, 2))
    table.insert(d, a.new(2, 3))
    
    for k, v in pairs(d) do
        print(k, v.x, v.y)
    end