如何在Lua中声明变量而不将其赋予nil?

use*_*636 2 variables lua scope declaration local

我发现做以下事情非常有用:

if not variable then
    variable = value
end
Run Code Online (Sandbox Code Playgroud)

当然,我通常认为该变量是本地变量,但我不能在我的if中声明它本地,或者它不可访问.

所以我有时会这样做:

local variable
if not variable then
    variable = value
end
Run Code Online (Sandbox Code Playgroud)

问题是,当我迭代这个代码时,变量声明将变量设置为nil.如果我能够拥有一个全局值(我可以),我可以通过不在if块之外声明变量来绕过它.

但是,有没有什么方法可以让我既有本地价值又让它保持价值?

Mar*_*der 7

首先,orLua中定义的方式为您提供了一个很好的习惯用法来if完全避免:

variable = variable or value
Run Code Online (Sandbox Code Playgroud)

如果变量是nil,or将评估为其第二个操作数.当然,这只会起作用,如果false不是有效值variable(因为false并且就所nil涉及的都是"假" or).

但是,您仍然遇到需要在某处声明变量的问题.我想你的问题是,在全局循环的情况下,你认为你必须做到:

while condition do
    variable = variable or value
    process(variable)
end
Run Code Online (Sandbox Code Playgroud)

(这会使variable全球化)或

while condition do
    local variable
    variable = variable or value
    process(variable)
end
Run Code Online (Sandbox Code Playgroud)

这是毫无意义的,因为local将范围限制为一次迭代并重新初始化variable为"零".

可以做的是创建另一个块来限制local变量的范围,但不做任何其他事情:

do
    local variable
    while condition do
        variable = variable or value
        process(variable)
    end
end
Run Code Online (Sandbox Code Playgroud)