Affectation

Lua permet des affectations multiples. Par conséquent, la syntaxe de l'affectation définit une liste de variables du côté gauche et une liste d'expressions du côté droit.

Les éléments des deux listes sont séparés par des virgules :
stat ::= varlist `=´ explist

varlist ::= var {`,´ var}

explist ::= exp {`,´ exp}

Les expressions sont abordées dans la section Expressions.

Avant l'affectation, la liste des valeurs est adaptée à la longueur de la liste des variables. S'il y a plus de valeurs que nécessaire, les valeurs excédentaires sont jetées. S'il y a moins de valeurs que nécessaire, la liste est complétée par autant de valeurs nulles que nécessaire. Si la liste des expressions se termine par un appel de fonction, toutes les valeurs renvoyées par cet appel entrent dans la liste des valeurs, avant l'ajustement (sauf si l'appel est entre parenthèses ; voir Expressions). L'instruction d'affectation évalue d'abord toutes ses expressions et ce n'est qu'ensuite que les affectations sont effectuées. Ainsi, le code permute cycliquement les valeurs de x, y et 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
Une affectation à une variable globale x = val est équivalente à l'affectation _env.x = val, où _env est l'environnement de la fonction en cours d'exécution. (La variable _env n'est pas définie dans Lua. Nous ne l'utilisons ici qu'à des fins explicatives)