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:
statement ::= for name `=´ exp `,´ exp [`,´ exp] do block end
for i=1,1000 do
t[i] = t[i] + 1
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
, andstep
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.
The generic for statement works over functions, called iterators. On each
iteration, the iterator function is called to produce a new value, stopping when this new value is
null. The generic for loop has the following
syntax:
stat ::= for namelist in explist do block
end namelist ::= Name {`,´ Name}
The pairs function is a build in iterator function which returns all of the key/value pairs in a
Lua table.
for key,value in pairs(t) do
block
end
A for statement like
for var_1, ···, var_n in explist do block end
is equivalent to the
code:do
local f, s, var = explist
local var_1, ···, var_n = f(s, var)
var = var_1
if var == null then break end
block
end
end
Note
the following:explist
is evaluated only once. Its results are aniteratorfunction, astate, and an initial valuefor the first iterator variable.f
,s
, andvar
are invisible variables. The names are here for explanatory purposes only.- You can use break to exit a for loop.
- The loop variables var_i are local to the loop; you cannot use their values after the for ends. If you need these values, then assign them to other variables before breaking or exiting the loop.