4.3.4 - Числовой for

Оператор for имеет две формы: числовой for и обобщенный for.

Числовой for имеет следующий синтаксис:

    for var=exp1,exp2,exp3 do
      something
    end
Этот цикл будет выполнять something для каждого значения var, начиная с exp1 и до exp2, используя exp3 как шаг инкремента var. Третье выражения необязательно; в случае его отсутстаия, Lua использует единицу в качестве шага инкремента. Как типовой пример такого цикла, можно привести
    for i=1,f(x) do print(i) end

    for i=10,1,-1 do print(i) end

Цикл for имеет несколько тонкостей that you should learnin order to make good use of it. Во-первых, все три выражения оцениваются однажды, перед началом цикла. Например, в первом примере, f(x) вызывается только один раз. Во-вторых, управляющая переменная является локальной переменной, объявляемой автоматически оператором for, видима только внутри цикла. Типичная ошибка заключается в том, что считают эту переменную существующей после окончания цикла:

    for i=1,10 do print(i) end
    max = i      -- возможна ошибка! Здесь 'i' - глобальная
Если есть необходимость иметь значение управляющей переменной вне цикла (обычно при прерывании цикла), нужно сохранить это значение в другой переменной:
    -- поиск значения в списке
    local found = nil
    for i=1,a.n do
      if a[i] == value then
        found = i      -- сохранение значения 'i'
        break
      end
    end
    print(found)
Наконец, в-третьих, нельзя менять значение управляющей переменной: эффект таких изменений непредсказуем. Если необходимо завершить цикл for до его нормального окончания, используйте break.
Hosted by uCoz