【问题标题】:Make Lua table nil via a function通过函数使 Lua 表为零
【发布时间】:2019-02-14 22:46:20
【问题描述】:

我创建了一个空表,t。然后我尝试使用函数破坏将其设置为零。在函数中,表变为 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】:

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

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

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

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

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

    【讨论】:

    • 函数参数是从表达式派生的值。如果表达式只是一个变量,这只是偶然。
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 2012-01-25
    • 2012-12-20
    • 2012-04-15
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多