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).