for 循环计数器应该是本地的

Blu*_*ber 6 lua

现在,我一直在这样制作 for 循环

local i
for i = 1, 10 do
  --stuff
end
Run Code Online (Sandbox Code Playgroud)

因为我认为你应该尝试保持local更好的性能并降低错误风险。

然而,我注意到简单地使用是很常见的。

for i = 1, 10 do
  --stuff
end
Run Code Online (Sandbox Code Playgroud)

使用是local首选,还是省略它无害?

col*_*son 6

(编辑)您提供的代码示例之间没有区别。但是,请注意,您定义的变量与循环local i中使用的变量不同for i = 1, 10 do。当循环退出时, 的原始值i保持不变(即i == nil)。

siffiejoe 指出,即使预先定义了相同的变量名,循环控制/计数器变量也永远无法在循环之外访问。循环对变量的任何引用都将使用循环值。循环之外的任何引用都将使用原始值或非循环值。

因此,可以安全地在for语句中重用现有变量名称,而不会损坏原始变量名称。如果要在循环访问计数器变量,可以预先定义一个额外的变量并在循环内更新它,如下所示(siffiejoe 的示例):

local j
for i = 1, 10 do
    j = i
    --[[ stuff ]]
end
print(j) -- j stores the last value of i before the loop exits
Run Code Online (Sandbox Code Playgroud)

文档:数字

  • 其实没有。即使您在外部声明了一个同名的(另一个)“本地”变量,您也无法访问循环体外部的循环变量。循环变量始终是 for 循环体的局部变量。您**可以**执行以下操作:`local j; 对于 i = 1, 10 j = i; --[[ stuff ]] end`,并在循环后访问`j`。 (3认同)