For loop 在循环执行时递减循环计数器

For loop 在循环执行时递减循环计数器,for-loop,lua,counter,For Loop,Lua,Counter,我试图在循环运行时减少for循环的计数器。不幸的是,Lua似乎不允许这样。这段代码应该永远运行: for i = 1, 100 do print (i) i = i - 1 end 但事实上,它只是简单地打印了系列1-100。这是故意的吗?如果是,我如何减少运行循环的计数器(例如,因为当前循环被取消资格,应该再次运行) 这是设计的。发件人: 3.3.5–对于报表 在循环开始之前,所有三个控制表达式只计算一次。它们都必须是数字 因此,在循环中修改i的值不会改变循环的运行方式 fo

我试图在循环运行时减少for循环的计数器。不幸的是,Lua似乎不允许这样。这段代码应该永远运行:

for i = 1, 100 do
    print (i)
    i = i - 1
end
但事实上,它只是简单地打印了系列1-100。这是故意的吗?如果是,我如何减少运行循环的计数器(例如,因为当前循环被取消资格,应该再次运行)

这是设计的。发件人:

3.3.5–对于报表 在循环开始之前,所有三个控制表达式只计算一次。它们都必须是数字

因此,在循环中修改
i
的值不会改变循环的运行方式

for i = 10, 1, -1 do
  print(i)
end
如果要在表格中后退,请执行以下操作:

for i = #SomeTable, 1, -1 do
  print(SomeTable[i].someproperty)
end

上面的于浩链接到了正确的手册页面,但引用了错误的部分

这是正确的报价

等同于代码:

 do
   local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
   if not (var and limit and step) then error() end
   while (step > 0 and var <= limit) or (step <= 0 and var >= limit) do
     local v = var
     block
     var = var + step
   end
 end
do
局部变量、极限、阶跃=tonumber(e1)、tonumber(e2)、tonumber(e3)
如果不是(变量、限制和步骤),则错误()结束

while(步骤>0和var)请不要混淆和。这两种语言不同。“Lua”是一个名称,在葡萄牙语中表示“Moon”。请不要将其写为“Lua”,这既难看又令人困惑,因为它成为了不同人群的首字母缩略词。如果你想要无限循环,只需使用
,而true do…end
我不想要无限循环。我想在某些条件下减少循环计数器。那么,我该如何着手解决这个问题?我需要改变循环运行的方式它正在执行时。@Drakestar您可以使用
while
循环或
repeat
循环。该引号中的“控制表达式”指的是for循环的边界(在本例中只是数字),而不是退出条件。这并不能回答问题。
 do
   local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
   if not (var and limit and step) then error() end
   while (step > 0 and var <= limit) or (step <= 0 and var >= limit) do
     local v = var
     block
     var = var + step
   end
 end