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块之外声明变量来绕过它.
但是,有没有什么方法可以让我既有本地价值又让它保持价值?
首先,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)