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)。