在循环执行时减少循环计数器

时间:2014-08-12 04:13:42

标签: for-loop lua counter

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

for i = 1, 100 do
    print (i)
    i = i - 1
end

但事实上,它只是打印1-100系列。这是设计的吗?如果是这样,我如何减少正在运行的循环的计数器(例如,因为当前循环被取消资格并且应该再次运行)?

3 个答案:

答案 0 :(得分:3)

它的设计。来自Lua reference manual

  

3.3.5 - 对于陈述

     

在循环开始之前,所有三个控制表达式仅被评估一次。它们必须全部产生数字。

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

答案 1 :(得分:0)

for i = 10, 1, -1 do
  print(i)
end

如果你想在表格中倒退,那么执行:

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

答案 2 :(得分:0)

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

这是正确的报价

<块引用>
 for v = e1, e2, e3 do block 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

[..]

  • varlimitstep 是不可见变量。此处显示的名称仅供说明之用。

换句话说,被循环的变量(上面称为“var”)和暴露给开发者的变量(称为“v”)以上) 是不同的。没有办法访问前者。