Indice del libro

Le funzioni modifica

Per definire una funzione, si scrive

function funzione()
    ...
end

Esempio:

function fattoriale(n)
    if (n == 0) then
        return 1
    end
    
    return n*fattoriale(n - 1)
end

print(fattoriale(4)) --scrive a video il numero 24

Valori di prima classe modifica

La seguente istruzione:

fatt = fattoriale

crea una variabile fatt e le "assegna" la funzione definita sopra. Ora, fatt può essere usato al posto di fattoriale:

print fatt(4) --scrive a video il numero 24
calcolo = fatt --fa lo stesso con un'altra variabile

In gergo, si dice che le funzioni sono valori di prima classe (first-class values), perché possono essere manipolati esattamente come i valori numerici e le stringhe.

Funzioni anonime modifica

Una funzione può non avere un nome.

Closures modifica

Aspetti dell'implementazione modifica

Tecnicamente, Lua trasforma ogni dichiarazione del tipo

function f()
    ...
end

nel formato

f = function() ... end

Bibliografia modifica