我创建一个空表t。然后,我尝试通过使用destroy函数将其设置为零。在函数中时,表变为nil,但是在函数之外,直到我将其显式设置为nil为止,它什么都没发生
是否可以通过使用Lua中的函数将表设置为nil?
local t = {}
local function destroy(input)
print("in function",input)
input = nil
print("in function",input)
end
print(t)
destroy(t)
print(t)
t = nil
print(t)
答案 0 :(得分:4)
没有诸如“将表设置为nil
”之类的东西。您可以在表的 中将值之一设置为nil
。您可以将变量设置为nil
。但是您不能将表设置为nil
。就像您无法将整数设置为nil
或将字符串设置为nil
一样。
设置变量的唯一方法是实际设置该变量。 input
和t
是两个单独的变量。它们可能都持有同一个表,但是对一个变量的修改不会神奇地影响另一个变量。
如果您希望destroy
能够一般地更改destroy
的调用者存储要传入的表的位置,则不能。函数通常不会影响用于调用的变量。函数的参数包含从传递给它的参数中获取的值;如果您除了不必将变量传递给函数(您可以传递表达式等的结果,而不必传递变量)的事实之外,则它们本身不包含变量 。不必存储在“变量”中。
在某些特定情况下,某个功能可以执行此操作。在非常特定的代码中,由于local t
对destroy
函数可见,因此它实际上可以执行t = nil
。但是,这仅在此特定代码中有效;将t
的声明移到destroy
下方,现在无法到达它。
总体而言,您想做的事无法完成。