通过函数使 Lua table 为 nil

Make Lua table nil via a function

我创建了一个空的 table,t。然后我尝试使用函数 destroy 将它设置为 nil。在函数中,table 变成了 nil,但是在函数之外,它什么也没有发生,直到我明确地将它设置为 nil

有没有办法通过使用 Lua 中的函数将 table 设置为 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)

没有"setting a table to nil"这样的东西。您可以将 within 和 table 中的一个值设置为 nil。您可以将 变量 设置为 nil。但是你不能将 table 设置为 nil。就像您不能将整数设置为 nil 或将字符串设置为 nil.

设置变量的唯一方法是实际设置该变量。 inputt 是两个独立的变量。它们可能都持有相同的 table,但对一个变量的修改不会神奇地影响另一个变量。

如果您希望 destroy 能够更改 destroy 的调用者存储传入的 table 的位置...您不能。函数通常不会影响用于调用它 的变量。函数的参数包含从传递给它的参数中获取的值;它们本身不包含变量,如果没有其他原因,你不必将变量传递给函数(你可以传递表达式的结果等等,不必存储在 "variables").

在某些特定情况下,函数可能能够做到这一点。在您非常具体的代码中,因为 local tdestroy 函数可见,所以它实际上可以执行 t = nil。但是,这仅适用于此特定代码;将t的声明移到destroy下方,现在无法到达

总的来说,你想做的都做不到。