通过函数将Lua表设置为零

时间:2019-02-14 13:45:31

标签: lua lua-table

我创建一个空表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)

1 个答案:

答案 0 :(得分:4)

没有诸如“将表设置为nil”之类的东西。您可以在表的 中将值之一设置为nil。您可以将变量设置为nil。但是您不能将表设置为nil。就像您无法将整数设置为nil或将字符串设置为nil一样。

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

如果您希望destroy能够一般地更改destroy的调用者存储要传入的表的位置,则不能。函数通常不会影响用于调用的变量。函数的参数包含从传递给它的参数中获取的值;如果您除了不必将变量传递给函数(您可以传递表达式等的结果,而不必传递变量)的事实之外,则它们本身不包含变量 。不必存储在“变量”中。

在某些特定情况下,某个功能可以执行此操作。在非常特定的代码中,由于local tdestroy函数可见,因此它实际上可以执行t = nil。但是,这仅在此特定代码中有效;将t的声明移到destroy下方,现在无法到达它。

总体而言,您想做的事无法完成。