返回介绍

2.4.3 - 赋值

发布于 2019-08-25 13:16:33 字数 1143 浏览 1178 评论 0 收藏 0

Lua 允许多重赋值。 因此,赋值的语法定义是等号左边放一系列变量, 而等号右边放一系列的表达式。 两边的元素都用逗号间开:

	stat ::= varlist1 `=´ explist1
	varlist1 ::= var {`,´ var}
	explist1 ::= exp {`,´ exp}

表达式放在 §2.5 里讨论。

在作赋值操作之前, 那一系列的右值会被对齐到左边变量需要的个数。 如果右值比需要的更多的话,多余的值就被扔掉。 如果右值的数量不够需求, 将会按所需扩展若干个 nil。 如果表达式列表以一个函数调用结束, 这个函数所返回的所有值都会在对齐操作之前被置入右值序列中。 (除非这个函数调用被用括号括了起来;参见 §2.5)。

赋值段首先会做运算完所有的表达式,然后仅仅做赋值操作。 因此,下面这段代码

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

会把 a[3] 设置为 20,而不会影响到 a[4] 。 这是因为 a[i] 中的 i 在被赋值为 4 之前就被拿出来了(那时是 3 )。 简单说 ,这样一行

 x, y = y, x

可以用来交换 xy 中的值。

对全局变量以及 table 中的域的赋值操作的含义可以通过 metatable 来改变。 对变量下标指向的赋值,即 t[i] = val 等价于 settable_event(t,i,val)。 (关于函数 settable_event 的详细说明,参见 §2.8。 这个函数并没有在 Lua 中定义出来,也不可以被调用。 这里我们列出来,仅仅出于方便解释的目的)

对于全局变量的赋值 x = val 等价于 _env.x = val,这个又可以等价于

 settable_event(_env, "x", val)

这里,_env 指的是正在运行中的函数的环境。 (变量 _env 并没有在 Lua 中定义出来。 我们仅仅出于解释的目的在这里写出来。)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文