像这样清除表会导致预期的行为:
table1 = { "a" }
table1 = {}
print(unpack(table1)) -- results in printing a blank line
但是如果你在一个函数中做同样的事情,它不需要:
table1 = { "a" }
function cleartest (x)
x = {}
print(unpack(x))
end
cleartest(table1) -- results in printing a blank line
print(unpack(table1)) -- results in "a"
是什么导致了这种行为?
编辑:澄清 Lua 中的传递表是如何工作的。x 不是 table1 的本地“副本”,因为它是“值是引用”类型,它实际上是对实际表的引用。例如:
table1 = { "a" }
function xisref (x)
x[2] = "b"
end
xisref(table1)
print(unpack(table1)) -- results in printing "a b" thus x is a reference to the actual table