通过函数使Lua表为零

问题描述 投票:1回答:1

我创建一个空表,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)
lua lua-table
1个回答
4
投票

没有“为nil设置表”这样的事情。您可以将表中的一个值设置为nil。您可以将变量设置为nil。但你不能设置表到nil。就像你不能将整数设置为nil或将字符串设置为nil

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

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

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

总的来说,你想做什么是不可能做到的。

© www.soinside.com 2019 - 2024. All rights reserved.