Structures de contrôle
if
if condition then
...
elseif autreCondition then
...
else
...
end
elseif et else sont optionnels, elseif peut être répété autant de fois que nécessaire.
while
while condition do
...
end
La condition est testée avant chaque itération (boucle à 0 ou plusieurs tours).
repeat...until
repeat
...
until condition
Le corps est exécuté au moins une fois ; la condition est testée après le corps, et — comme en
Lua — les variables locales déclarées dans le corps restent visibles dans l'expression until.
for numérique
for i = 1, 10 do ... end -- pas de 1 implicite
for i = 10, 1, -1 do ... end -- pas explicite (ici décroissant)
for i = 0, 1, 0.25 do ... end -- pas flottant
for Name = début, fin [, pas] do ... end : début, fin et pas (par défaut 1) sont évalués
une seule fois avant la boucle. La variable de boucle est locale au corps de la boucle et
réinitialisée à chaque itération (elle ne survit pas à la boucle).
for générique (itérateur)
for k, v in pairs(t) do ... end
for i, v in ipairs(t) do ... end
for line in io.lines(path) do ... end
for namelist in explist do ... end : explist doit produire une fonction itérateur (et
éventuellement un état et un contrôle initial, selon le protocole itérateur standard) ; à chaque
itération, la fonction est appelée et ses résultats sont affectés à namelist. La boucle
s'arrête dès que la première variable reçoit nil. pairs/ipairs sont fournis par la
bibliothèque standard (stdlib/), pas par le langage lui-même.
break et continue
for i = 1, 10 do
if i == 5 then break end
if i % 2 == 0 then continue end
print(i)
end
break sort immédiatement de la boucle englobante (for, while ou repeat) la plus proche.
continue passe directement à l'itération suivante de cette boucle. Les deux ne sont valides
qu'à l'intérieur d'une boucle.
do...end
do
local temp = compute()
use(temp)
end
-- temp n'existe plus ici
Ouvre un bloc portant sa propre portée de variables locales, sans introduire de boucle ni de condition — utile pour limiter la durée de vie de variables locales.
return
return
return 1
return 1, 2, 3
return f() -- développe tous les résultats de f()
return termine l'exécution de la fonction (ou du script) courant(e) et doit être la dernière
instruction d'un bloc (rien ne peut suivre un return dans le même bloc, à l'exception d'un
; optionnel).