我正在尝试制作一张 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
现在y
和x
都引用同一个表。这就是为什么 array
内的三个表是相同的。
关于将一个变化的表插入到另一个表中。表值本应不同却相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718107/