Lua come utilizzare le Funzioni:

Le funzioni sono il principale meccanismo per l'estrazione di istruzioni ed espressioni in Lua. Le funzioni possono sia svolgere un compito specifico (quello che viene talvolta chiamato procedura o subroutine in altre lingue) o calcolare e restituire valori. Nel primo caso, si usa una chiamata di funzione come una dichiarazione; nel secondo caso, si usa come espressione:

stampa (8 * 9, 9/8)
a = Math.sin (3) + math.cos (10)
stampa (os.date ())

In entrambi i casi, si scrive un elenco di argomenti racchiusi tra parentesi. Se la chiamata di funzione non ha argomenti, dobbiamo scrivere una lista vuota () per indicare la chiamata. C'è un caso speciale a questa regola: se la funzione ha un solo argomento e questo argomento è una stringa letterale o un costruttore tavolo, poi le parentesi sono opzionali:

print "Ciao Mondo" <-> print ("Ciao Mondo")
dofile 'a.lua' <-> dofile ('a.lua')
stampa [[un multi-riga <-> print ([[un multi-linea
messaggio messaggio]]]])
f {x = 10, y = 20} <-> f (x = {10, y = 20})
digitare {} <-> tipo ({})

Lua offre anche una sintassi speciale per le chiamate object-oriented, l'operatore due punti. Un'espressione come o: foo (x) è solo un altro modo di scrivere o.foo (o, x), cioè di chiamare o.foo aggiunta o come primo argomento extra. Nel Capitolo 16 discuteremo tali chiamate (e la programmazione orientata agli oggetti) in modo più dettagliato.

Funzioni utilizzate da un programma Lua possono essere definiti sia in Lua e in C (o in qualsiasi altra lingua usata dall'applicazione host). Per esempio, tutte le funzioni di libreria sono scritti in C; ma questo fatto non ha alcuna rilevanza per i programmatori Lua. Quando si chiama una funzione, non c'è differenza tra le funzioni definite in Lua e funzioni definite in C.

Come abbiamo visto in altri esempi, una definizione di funzione ha una sintassi tradizionale; per esempio

- Aggiungere tutti gli elementi di matrice `a '
la funzione add (a)
sum locale = 0
per i, v in ipairs (a) fare
sum = sum + v
fine
sum ritorno
fine

In questa sintassi, una definizione di funzione ha un nome (aggiungere, nell'esempio precedente), un elenco di parametri, e un corpo, che è un elenco di istruzioni.
I parametri funzionano esattamente come variabili locali, inizializzate con i parametri attuali indicati nella chiamata di funzione. È possibile richiamare una funzione con un certo numero di argomenti diversi da il suo numero di parametri. Lua regola il numero di argomenti per il numero di parametri, come avviene in un assegnamento multiplo: argomenti aggiuntivi vengono gettati via; parametri extra ottenere nulla. Per esempio, se abbiamo una funzione come

funzione f (a, b) restituisce un o alla fine b
avremo la seguente mappatura dagli argomenti ai parametri:
PARAMETRI CHIAMATA

f (3) a = 3, b = nil
f (3, 4) a = 3, b = 4
f (3, 4, 5) a = 3, b = 4 (5 viene scartata)

Anche se questo comportamento può portare a errori di programmazione (facilmente avvistato in fase di esecuzione), è anche utile, soprattutto per gli argomenti di default. Ad esempio, si consideri la seguente funzione, per incrementare un contatore globale.

Funzione incCount (n)
n = n o 1
count = count + n
fine

Questa funzione ha 1 come argomento di default; cioè, la chiamata incCount (), senza argomenti, incrementi conteggio di uno. Quando si chiama incCount (), Lua prima inizializza n con zero; le oi risultati nella sua secondo operando; e come risultato Lua assegna un predefinito 1 a n.