Lua - 在 for 循环中修改 'stop' 变量的值,它还会正常终止吗?

例如,如果我这样做:

local iStop = 32
for i = 1, iStop do
  iStop = iStop + 1
end

循环是否保证只运行 32 次,还是可能会无限运行?

点赞
用户2858170
用户2858170

请参阅Lua参考手册3.3.5:For语句

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
    var = var - step
    while true do
        var = var + step
        if (step >= 0 and var > limit) or (step < 0 and var < limit) then
            break
        end
        local v = var
        block
    end
end

...

所有三个控制表达式都在循环开始前只被计算一次。

这个循环会运行32次。实际上的循环限制是在循环开始前iStop值的一个副本,并且无论你在循环中如何处理iStop,它都不会影响循环的限制。

2020-06-19 21:34:10