有人可以解释一下吗?
for i = 1, 5 do
print(i)
i = i - 1
print(i)
end
输出是:
1
0
2
1
3
2
and so forth
我曾经想过要在1和0之间进行改变。但显然它会不断增加,就像我根本没有改变它一样。发生了什么事?
我不时要删除第i个表元素。所以下一个要处理的元素将是我。在C中我只会在循环内容的末尾写--i。在卢阿的任何官方方式? :)
答案 0 :(得分:6)
循环索引(在你的情况下为i
)是循环体的局部变量,因此你对它做的任何修改都不会对循环条件或正在处理的下一个元素产生影响(对于for
循环)。
如果您需要更好地控制索引以删除元素并继续处理,则应使用while
循环形式。有关详细信息,请参阅For Statement部分。
答案 1 :(得分:3)
使用while(true)
循环怎么样?然后你必须手动中断,但这可能有效。
local i = 5
while(true) do
print(i)
i = i - 1
if (i == 0) then break; end
end
答案 2 :(得分:1)
尝试设置循环控制变量会导致故障安全行为。
我无法在本手册最新版本的语言不兼容部分找到它,但我记得它被列为某处作为更改。它更像是以前未定义行为的形式化。
如果您真的很好奇,请从luac
查看您的计划列表。循环控制变量具有内部名称,因此无法更改。如果在赋值中使用相同的名称,则将局部变量合成为替代。它可以防止无意中导致for
变为无限。
你需要另一种循环。