在循环执行过程中递减循环计数器

我正在尝试在 for 循环运行时递减计数器。不幸的是,Lua 似乎不允许这样做。这段代码应该一直运行下去:

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

但事实上,它只是简单地打印出 1-100 的序列。这是故意设计的吗?如果是,那么我如何递减正在运行的循环的计数器(例如因为当前循环被取消资格,应该重新运行)?

点赞
用户1009479
用户1009479

这是设计如此。来自Lua参考手册

3.3.5 – for循环语句

所有三个控制表达式只计算一次,在循环开始之前。它们必须都返回数字。

所以在循环内部修改i的值不会改变循环如何运行。

2014-08-12 04:19:43
用户744807
用户744807
对于倒序遍历一个表,你可以这样做:

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


如果要倒序遍历从 10 到 1 的数列,可以使用以下代码:

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

```

2021-02-08 01:43:47
用户238419
用户238419

以下是正确引用的部分:

 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 ”)是不同的。没有办法访问前者。

2021-05-18 19:48:45