我试图在循环运行时减少for循环的计数器。不幸的是,Lua似乎不允许这样做。这段代码应该永远运行:
for i = 1, 100 do
print (i)
i = i - 1
end
但事实上,它只是打印1-100系列。这是设计的吗?如果是这样,我如何减少正在运行的循环的计数器(例如,因为当前循环被取消资格并且应该再次运行)?
答案 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
[..]
var
、limit
和 step
是不可见变量。此处显示的名称仅供说明之用。换句话说,被循环的变量(上面称为“var
”)和暴露给开发者的变量(称为“v
”)以上) 是不同的。没有办法访问前者。