Skip to content

3.3.3 - 赋值

Lua允许多重赋值。因此,Lua的赋值语法定义成左边是变量列表而右边是表达式列表。其两边的列表都以逗号分隔元素:

stat ::= varlist ‘=’ explist
varlist ::= var {‘,’ var}
explist ::= exp {‘,’ exp}

表达式参见3.4

在做赋值操作之前,右侧值列表会被调整至与左侧变量列表长度相同(参见3.4.12)。

如果某个变量在多重赋值中同时被读取,那么Lua会确保所有值的读取操作处在赋值之前。

lua
i = 3
i, a[i] = i+1, 20

因此这段代码会将a[3]设为20,而不会影响a[4]的值,因为a[i]中的的i值在其被赋值为4之前就已经决定了。

lua
x, y = y, x

同理,这行代码会交换x和y的值。

lua
x, y, z = y, z, x

而这行代码会回绕交换x、y、z的值。

要注意这里的访问语义保证只被涵盖在赋值语句中。如果在赋值期间有方法或元函数改变了变量的值,Lua将不会保证访问顺序。

全局名称的赋值 x = val 等效于 _ENV.x = val(参见2.2)。

这意味这可以通过元表来改变表属性和全局变量(实际上也是表属性)的赋值(参见2.4)。