Как пропустить некоторые итерации в цикле for?

Я хочу чтобы скрипт пропускал некоторые итерации. Должно получиться (1, 2, 8, 9, 10) Например:

for i = 1, 10 do
if i == 2 then i = 8 end
print(i) end

Ответы (1 шт):

Автор решения: ESkri

Так не получится:

for i = 1, 10 do
if i == 2 then i = 8 end
print(i) end

В Lua, в отличие от других языков, каждый повтор цикла порождает свой экземпляр переменной цикла (это сделано специально для того, чтобы реализовать правильное замыкание, а не такое как в JS).
Текущий экземпляр переменной цикла живёт до конца тела цикла, а на следующем повторе цикла будет уже другая переменная, с тем же именем, инициализированная следующим значением.
Короче говоря, изнутри цикла влиять на логику переменной цикла (напр, пропускать значения) невозможно.
Придётся делать вот так:

for i = 1, 10 do
  if not (i >= 3 and i <= 7) then
    print(i) 
  end
end

Ну, или можно использовать циклы while или repeat с внешним счётчиком цикла:

local i = 0
while i < 10 do
  i = i + 1
  if i == 3 then i = 8 end
  print(i) 
end
→ Ссылка