Assegnazione

Lua consente assegnazioni multiple. Pertanto, la sintassi dell'assegnazione definisce un elenco di variabili sul lato sinistro e un elenco di espressioni sul lato destro.

Gli elementi di entrambi gli elenchi sono separati da virgole:
stat ::= varlist `=´ explist

varlist ::= var {`,´ var}

explist ::= exp {`,´ exp}

Le espressioni sono trattate in Espressioni.

Prima dell'assegnazione, l'elenco dei valori viene adattato alla lunghezza dell'elenco delle variabili. Se ci sono più valori di quelli necessari, i valori in eccesso vengono buttati via. Se il numero di valori è inferiore a quello necessario, l'elenco viene ampliato con il numero di null necessari. Se l'elenco di espressioni termina con una chiamata di funzione, tutti i valori restituiti da quella chiamata entrano nell'elenco dei valori, prima dell'aggiustamento (tranne quando la chiamata è racchiusa tra parentesi; vedere Espressioni). L'istruzione di assegnazione valuta prima tutte le sue espressioni e solo dopo vengono eseguite le assegnazioni. In questo modo il codice permuta ciclicamente i valori di x, y e z.
i = 3

i, a[i] = i+1, 20

sets a[3] to 20, without affecting a[4] because the i in a[i] is
evaluated (to 3) before it is assigned 4. Similarly, the line

x, y = y, x

exchanges the values of x and y, and

x, y, z = y, z, x
Un'assegnazione a una variabile globale x = val è equivalente all'assegnazione _env.x = val, dove _env è l'ambiente della funzione in esecuzione. (La variabile _env non è definita in Lua. Lo usiamo qui solo a scopo esplicativo)