This first edition was written for Lua 5.0. While still largely relevant for later versions, there are some differences.
The fourth edition targets Lua 5.3 and is available at Amazon and other bookstores.
By buying the book, you also help to support the Lua project.
![]() |
Programming in Lua | ![]() |
| Part I. The Language Chapter 4. Statements |
The for statement has two variants: the numeric for and the generic for.
A numeric for has the following syntax:
for var=exp1,exp2,exp3 do
something
end
That loop will execute something for each value of var
from exp1 to exp2, using exp3 as the step
to increment var.
This third expression is optional;
when absent, Lua assumes one as the step value.
As typical examples of such loops, we have
for i=1,f(x) do print(i) end
for i=10,1,-1 do print(i) end
The for loop has some subtleties that you should learn
in order to make good use of it.
First, all three expressions are evaluated once, before the loop starts.
For instance, in the first example, f(x) is called only once.
Second, the control variable is a local variable automatically
declared by the for statement
and is visible only inside the loop.
A typical mistake is to assume that the variable still exists after
the loop ends:
for i=1,10 do print(i) end
max = i -- probably wrong! `i' here is global
If you need the value of the control variable after the loop
(usually when you break the loop),
you must save this value into another variable:
-- find a value in a list
local found = nil
for i=1,a.n do
if a[i] == value then
found = i -- save value of `i'
break
end
end
print(found)
Third, you should never change the value of the control variable:
The effect of such changes is unpredictable.
If you want to break a for loop
before its normal termination, use break.
| Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |