Например, если я сделаю следующее:
local iStop = 32 for i = 1, iStop do iStop = iStop + 1 end
Будет ли l oop гарантированно работать только 32 итерации, или в любом случае он может работать бесконечно?
См. Lua Справочное руководство 3.3.5: Для утверждения
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 ... Все три управляющих выражения оцениваются только один раз перед запуском цикла.
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
...
Все три управляющих выражения оцениваются только один раз перед запуском цикла.
l oop будет выполняться 32 раза. Фактический предел l oop является копией значения iStop перед запуском l oop, и независимо от того, что вы делаете с iStop в l oop, это не повлияет на предел l oop .
iStop