返回介绍

2.5 - 表达式

发布于 2019-08-25 13:16:35 字数 1614 浏览 1152 评论 0 收藏 0

2.5 - 表达式

Lua 中有这些基本表达式:

	exp ::= prefixexp
	exp ::= nil | false | true
	exp ::= Number
	exp ::= String
	exp ::= function
	exp ::= tableconstructor
	exp ::= `...´
	exp ::= exp binop exp
	exp ::= unop exp
	prefixexp ::= var | functioncall | `(´ exp `)´

数字和字符串在 §2.1 中解释; 变量在 §2.3 中解释; 函数定义在 §2.5.9 中解释; 函数调用在 §2.5.8 中解释; table 的构造在 §2.5.7 中解释; 可变参数的表达式写作三个点 ('...') ,它只能被用在有可变参数的函数中; 这些在 §2.5.9 中解释。

二元操作符包含有数学运算操作符(参见 §2.5.1), 比较操作符(参见 §2.5.2),逻辑操作符(参见 §2.5.3), 以及连接操作符(参见 §2.5.4)。 一元操作符包括负号(参见see §2.5.1), 取反 not(参见 §2.5.3), 和取长度操作符(参见 §2.5.5)。

函数调用和可变参数表达式都可以放在多重返回值中。 如果表达式作为一个独立语句段出现(参见 §2.4.6) (这只能是一个函数调用), 它们的返回列表将被对齐到零个元素,也就是忽略所有返回值。 如果表达式用于表达式列表的最后(或者是唯一)的元素, 就不会有任何的对齐操作(除非函数调用用括号括起来)。 在任何其它的情况下,Lua 将把表达式结果看成单一元素, 忽略除第一个之外的任何值。

这里有一些例子:

 f() -- 调整到 0 个结果
 g(f(), x) -- f() 被调整到一个结果
 g(x, f()) -- g 被传入 x 加上所有 f() 的返回值
 a,b,c = f(), x -- f() 被调整到一个结果 ( c 在这里被赋为 nil )
 a,b = ... -- a 被赋值为可变参数中的第一个,
 -- b 被赋值为第二个 (如果可变参数中并没有对应的值,
						-- 这里 a 和 b 都有可能被赋为 nil)
 
 a,b,c = x, f() -- f() 被调整为两个结果
 a,b,c = f() -- f() 被调整为三个结果
 return f() -- 返回 f() 返回的所有结果
 return ... -- 返回所有从可变参数中接收来的值
 return x,y,f() -- 返回 x, y, 以及所有 f() 的返回值
 {f()} -- 用 f() 的所有返回值创建一个列表
 {...} -- 用可变参数中的所有值创建一个列表
 {f(), nil} -- f() 被调整为一个结果

被括号括起来的表达式永远被当作一个值。所以, (f(x,y,z)) 即使 f 返回多个值,这个表达式永远是一个单一值。 ((f(x,y,z)) 的值是 f 返回的第一个值。如果 f 不返回值的话,那么它的值就是 nil 。)

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

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

发布评论

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