将一个变化的表插入到另一个表中。表值本应不同却相同

标签 insert lua lua-table

我正在尝试制作一张 table ,里面有 table 。里面的表格与之前的值略有不同。但最终的结果是主表内部的表彼此相等并且等于其最新值。

local array = {}
local x 
local y

function test(a)
  if a==1 then
    x = {1,1}
    print("x returned")
    y = x
    for k,v in pairs(x) do print(k,v) end
    return x
  end

  if a>=1 then
    p=math.random(1,2)
    n=math.random(2,4)
    table.remove(y,p)
    table.insert(y,p,n)
    print("")
    print("y returned")
    for k,v in pairs(y) do print(k,v) end
    return y
  end

end


array[1] = test(1)
array[2] = test(2)
array[3] = test(3)

print("")
for k,v in pairs(array) do print(k,v) end
testtable=array[1]
print("")
for k,v in pairs(testtable) do print(k,v) end

输出:

x returned
1   1
2   1

y returned
1   1
2   3

y returned
1   1
2   4

1   table: 0x678300
2   table: 0x678300
3   table: 0x678300

1   1
2   4

array 中的三个表应该彼此不同。我究竟做错了什么?关于表格有什么我不知道的吗?

最佳答案

表是对象,这意味着变量不包含表的值。相反,它保存对表的引用。因此,在函数 test 中,当您执行以下操作时:

y = x

现在yx都引用同一个表。这就是为什么 array 内的三个表是相同的。

关于将一个变化的表插入到另一个表中。表值本应不同却相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718107/

相关文章:

arrays - 在 Lua 中是否有更简单/更简洁的方法来初始化这个数组?

c++ - 当函数有多个参数时读取表会返回错误

php mysql pdo bindparam数据未插入

lua - Torch/Lua,如何将训练有素的神经网络模型保存到文件中?

c - 如何将 lua 字符串转换为 C char*?

lua - Lua中打印字符串的地址

c - 表格长度运算符的性能

mysql - 在 MySQL 中,如何从单个表加载多个表,同时保持引用完整性?

mysql - 通过 Bash 为 SQL 表中的日期时间条目添加 NULL 值

javascript - ServiceNow - 查询表和插入事件