Asignación
Lua permite asignaciones múltiples. Por lo tanto, la sintaxis para la asignación define una lista de variables en el lado izquierdo y una lista de expresiones en el lado derecho.
Los elementos de ambas listas están separados por comas:
stat ::= varlist `=´ explist
varlist ::= var {`,´ var}
explist ::= exp {`,´ exp}Las expresiones se tratan en Expresiones.
Antes de la asignación, la lista de valores se ajusta a la longitud de la lista de variables. Si hay más valores de los necesarios, los valores sobrantes se desechan. Si hay menos valores de los necesarios, la lista se amplía con tantos nulos como sea necesario. Si la lista de expresiones termina con una llamada a una función, entonces todos los valores devueltos por esa llamada entran en la lista de valores, antes del ajuste (excepto cuando la llamada está encerrada entre paréntesis; véase Expresiones). La sentencia de asignación evalúa primero todas sus expresiones y sólo entonces se realizan las asignaciones. Así, el código permuta cíclicamente los valores de x, y y z.
Una asignación a una variable global x = val es equivalente a la asignación _env.x = val, donde _env es el entorno de la función en ejecución. (La variable _env no está definida en Lua. Lo utilizamos aquí sólo con fines explicativos)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