【发布时间】:2013-03-12 22:13:26
【问题描述】:
像这样清除表会导致预期的行为:
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
【问题讨论】:
-
您的编辑表明您似乎对 Lua 中的值和变量的工作方式存在根本性的误解。
-
请让我知道我的例子不正确的地方。
标签: function lua scope lua-table