Lua - изменение значения переменной 'stop' внутри for-l oop, будет ли оно завершаться как обычно? - PullRequest
2 голосов
/ 19 июня 2020

Например, если я сделаю следующее:

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

Будет ли l oop гарантированно работать только 32 итерации, или в любом случае он может работать бесконечно?

1 Ответ

3 голосов
/ 20 июня 2020

См. 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

...

Все три управляющих выражения оцениваются только один раз перед запуском цикла.

l oop будет выполняться 32 раза. Фактический предел l oop является копией значения iStop перед запуском l oop, и независимо от того, что вы делаете с iStop в l oop, это не повлияет на предел l oop .

...