Инструкция for имеет две формы, по одной для чисел и таблиц. Числовая версия цикла for имеет следующий синтаксис: stat ::= for name `=' exp1 `,' exp1 [`,' exp1] do block end Инструкция for, подобная: for var = 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 while (_step>0 and var<=_limit) or (_step<=0 and var>=_limit) do block var = var+_step end end Обратите внимание на следующее:
sep=0pt
_limit и _step являются невидимыми переменными. Имена здесь даны только для объяснительных целей.
Поведение неопределено, если Вы меняете значение var внутри блока.
Если третье выражение (step) отсутствует, то используется step 1.
Значения limit и step оценены только однажды, перед стартом цикла.
Переменная var локальна для инструкции: Вы не можете использовать ее значение после окончания работы for.
Вы можете использовать break, чтобы выйти из for. Если Вы нуждаетесь в значении индекса, присвойте его другой переменной перед выходом.
Таблица для инструкции for пересекает все пары (index,value) данной таблицы. Это имеет следующий синтаксис: stat ::= for name `,' name in exp1 do block end Инструкция for, подобная: for index, value in exp do block end равносильна такому коду: do local _t = exp local index, value = next(t, nil) while index do block index, value = next(t, index) end end Обратите внимание на следующее:
sep=0pt
_t является невидимомй переменномй. Имя здесь дано только для объяснительных целей.
Поведение неопределено, если Вы меняете значение index внутри блока.
Поведение неопределено, если Вы меняете таблицу _t при работе цикла.
Переменнае index и var локальны для инструкции: Вы не можете использовать их значения после окончания работы for.
Вы можете использовать break, чтобы выйти из for. Если Вы нуждаетесь в значениях index или value, присвойте их другим переменным перед выходом.
Порядок, в котором элементы таблицы будут пересечены, неопределен, даже для числовых индексов. Если Вы хотите пересекать индексы в числовом порядке, используйте числовой вариант for.