Программирование на Lua | ||
Часть I. Язык Глава 4. Операторы |
Оператор 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.
Copyright © 2003-2004 Roberto Ierusalimschy. All rights reserved. | Перевод на русский Artem13 |