Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop Lua for loop reduce i?奇怪的行为_For Loop_Lua_Decrement - Fatal编程技术网

For loop Lua for loop reduce i?奇怪的行为

For loop Lua for loop reduce i?奇怪的行为,for-loop,lua,decrement,For Loop,Lua,Decrement,有人能给我解释一下吗 for i = 1, 5 do print(i) i = i - 1 print(i) end 输出为: 1 0 2 1 3 2 and so forth 我检查了I是否在1和0之间更改。但很明显,它一直在增加,就好像我根本没有改变它一样。发生什么事了 我必须时不时地删除第I个表元素。因此,下一个要处理的元素将再次是i。在C语言中,我只写-,在循环内容的末尾。在卢阿有官方的方式吗?:) 使用while(true)循环怎么样?然后您必须手动中断,但这可能会起作

有人能给我解释一下吗

for i = 1, 5 do
  print(i)
  i = i - 1
  print(i)
end
输出为:

1
0
2
1
3
2
and so forth
我检查了I是否在1和0之间更改。但很明显,它一直在增加,就好像我根本没有改变它一样。发生什么事了


我必须时不时地删除第I个表元素。因此,下一个要处理的元素将再次是i。在C语言中,我只写-,在循环内容的末尾。在卢阿有官方的方式吗?:)

使用
while(true)
循环怎么样?然后您必须手动中断,但这可能会起作用

local i = 5
while(true) do
    print(i)
    i = i - 1
    if (i == 0) then break; end
end
循环索引(
i
在您的例子中)是循环主体的局部变量,因此对其所做的任何修改都不会影响循环条件或正在处理的下一个元素(对于
for
循环)


如果您需要更好地控制索引以删除元素并保持处理,则应使用
while
循环表单。有关详细信息,请参见章节。

尝试设置循环控制变量会导致故障保护行为

我在手册最新版本的“语言不兼容”部分中找不到它,但我记得它被列在某个地方作为一项更改。这更多的是对以前未定义的行为的形式化

如果您真的很好奇,请参阅
luac
中的程序列表。循环控制变量具有内部名称,因此无法更改。如果在赋值中使用相同的名称,则将局部变量合成为替代变量。它可以防止无意中导致的
变为无穷大


您需要另一种循环。

不要对其使用循环控制变量。使用一些其他条件(即使是手动中断条件始终为真的条件)。您也可以跟踪差异:
local d=0;for/do i=i-d;如果d=d+1结束。。。结束