我创建一个空表,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)
没有“为nil
设置表”这样的事情。您可以将表中的一个值设置为nil
。您可以将变量设置为nil
。但你不能设置表到nil
。就像你不能将整数设置为nil
或将字符串设置为nil
。
设置变量的唯一方法是实际设置该变量。 input
和t
是两个独立的变量。它们可能都持有相同的表,但对一个变量的修改不会神奇地影响另一个变量。
如果你希望destroy
能够通常改变destroy
的调用者存储传入的表的位置......你不能。函数通常不会影响用于调用它的变量。函数的参数包含从传递给它的参数中获取的值;它们不包含变量本身,如果没有其他原因而不是你不必将变量传递给函数(你可以传递表达式的结果等等,不必存储在“变量“)。
在某些特定情况下,函数可能会这样做。在你非常具体的代码中,因为local t
对于destroy
函数是可见的,所以它实际上可以执行t = nil
。但是,这仅适用于此特定代码;移动t
在destroy
下面的声明,现在它无法达到它。
总的来说,你想做什么是不可能做到的。