The control structures if, while, and repeat have the usual meaning and familiar syntax:

stat ::= while exp do block end

stat ::= repeat block until exp

stat ::= if exp then block {elseif exp then block} [else block] end

Lua also has a for statement, in two flavors (see §2.4.5).

The condition expression of a control structure can return any value. Both false and nil are considered false. All values different from nil and false are considered true (in particular, the number 0 and the empty string are also true).

In the repeat-until loop, the inner block does not end at the until keyword, but only after the condition. So, the condition can refer to local variables declared inside the loop block.

The return statement is used to return values from a function or a chunk (which is just a function). Functions and chunks can return more than one value, and so the syntax for the return statement is

stat ::= return [explist]

The break statement is used to terminate the execution of a while, repeat, or for loop, skipping to the next statement after the loop:

stat ::= break

A break ends the innermost enclosing loop.

The return and break statements can only be written as the last statement of a block. If it is really necessary to return or break in the middle of a block, then an explicit inner block can be used, as in the idioms do return end and do break end, because now return and break are the last statements in their (inner) blocks.

2.4.5 - For Statement

The for statement has two forms: one numeric and one generic.

The numeric for loop repeats a block of code while a control variable runs through an arithmetic progression. It has the following syntax:

stat ::= for Name '=' exp ',' exp [',' exp] do block end

The block is repeated for name starting at the value of the first exp, until it passes the second exp by steps of the third exp. More precisely, a for statement like

for v = e1, e2, e3 do block end

is equivalent to the code:

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

local v = var

block

var = var + step

end

end

Note the following:

All three control expressions are evaluated only once, before the loop starts. They must all result in numbers.

var, limit, and step are invisible variables. The names shown here are for explanatory purposes only.

If the third expression (the step) is absent, then a step of 1 is used.

You can use break to exit a for loop.

The loop variable v is local to the loop; you cannot use its value after the for ends or is broken. If you need this value, assign it to another variable before breaking or exiting the loop.

Lua coding guideWhere stories live. Discover now