赋值
Lua 允许进行多重赋值。因此,赋值语法在左侧定义一列变量,在右边定义一列表达式。两个列表中的元素均以逗号分隔:
stat ::= varlist `=´ explist
varlist ::= var {`,´ var}
explist ::= exp {`,´ exp}表达式在表达式中讨论。
在赋值之前,值列表会调整为变量列表长度。值超过所需的数目时,将会丢弃多余的值。如果值少于所需的数目,那么会根据需要,以任意数目的 null 扩展列表。如果表达式列表以函数调用结尾,那么该调用所返回的所有值都会在调整前进入值列表(除非将该调用括在圆括号内;请参阅表达式)。
赋值语句先对其所有表达式进行求值,然后才执行赋值。因此,以下代码:
i = 3
i, a[i] = i+1, 20会将 a[3] 设置为 20,而不会影响 a[4],因为 a[i] 中的 i 会在获赋值 4 之前求值为 3。同样,以下代码行:
x, y = y, x交换 x 和 y 的值,而以下代码行:
x, y, z = y, z, x循环交换 x、y 和 z 的值。
对全局变量 x = val 的赋值等同于赋值 _env.x = val,其中 _env 是运行中的函数的环境。(_env
变量在 Lua 中未定义。在这里使用这个变量只是为了进行说明。)