转让

Lua 允许进行多重赋值。 因此,赋值语法在左侧定义一列变量,在右边定义一列表达式。

两个列表中的元素均以逗号分隔:
stat ::= varlist `=´ explist

varlist ::= var {`,´ var}

explist ::= exp {`,´ exp}

表达式在表达式中讨论。

在赋值之前,值列表会调整为变量列表长度。 值超过所需的数目时,将会丢弃多余的值。 如果数值少于需要,列表会根据需要添加空值。 如果表达式列表以函数调用结束,那么该函数调用返回的所有值都会在调整之前进入值列表(除非该函数调用用括号括起来;请参阅表达式)。 赋值语句先对其所有表达式进行求值,然后才执行赋值。 因此,代码会对 x、y 和 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
对全局变量 x = val 的赋值等同于赋值_env.x=val,其中 _env 是运行函数的环境。 (Lua 中没有定义 _env 变量。 在这里使用这个变量只是为了进行说明。)