转让
Lua 允许进行多重赋值。 因此,赋值语法在左侧定义一列变量,在右边定义一列表达式。
两个列表中的元素均以逗号分隔:
stat ::= varlist `=´ explist
varlist ::= var {`,´ var}
explist ::= exp {`,´ exp}表达式在表达式中讨论。
在赋值之前,值列表会调整为变量列表长度。 值超过所需的数目时,将会丢弃多余的值。 如果数值少于需要,列表会根据需要添加空值。 如果表达式列表以函数调用结束,那么该函数调用返回的所有值都会在调整之前进入值列表(除非该函数调用用括号括起来;请参阅表达式)。 赋值语句先对其所有表达式进行求值,然后才执行赋值。 因此,代码会对 x、y 和 z 的值进行循环排列。
对全局变量 x = val 的赋值等同于赋值_env.x=val,其中 _env 是运行函数的环境。 (Lua 中没有定义 _env 变量。 在这里使用这个变量只是为了进行说明。)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