我正在尝试在其中创建一个包含表格的表格。内部的表格与之前的值略有不同。但最终结果是主表中的表彼此相等并且等于其最新值。
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
内的三个表应该彼此不同。我究竟做错了什么?桌子上有什么东西我不知道吗?
答案 0 :(得分:2)
表是对象,表示变量不包含表的值。相反,它包含对表的引用。所以在函数test
中,当你这样做时:
y = x
现在y
和x
都引用同一个表格。这就是array
内的三个表格相同的原因。