首页 > 该怎样理解 Lua 逻辑运算符 and 和 or 的设计?

该怎样理解 Lua 逻辑运算符 and 和 or 的设计?

Lua 里逻辑运算符认为 false 和 nil 是为 false,其他为 true。andor 的运算结果不是 true 和 false,而是和它的两个操作数相关。即:

a and b:如果 a 为 false,则返回 a,否则返回 b
a or b:如果 a 为 true,则返回 a,否则返回 b

为什么逻辑运算符返回的是参数本身而不是布尔值?为什么要这样设计?


我想这个应该是和“短路求值”相关。
因为:
a and b: 如果a为false,那么b的结果是false还是true已经不重要,因为整个表达式的结果已经是false了,所以直接返回a就可以了
同理,a or b:如果a为true,那么b的结果是false还是true已经不重要,因为整个表达式的结果已经是true了,所以直接返回a就可以了
这是一种优化,避免不必要的计算(例如b是一个较复杂的表达式,就可以省掉这个计算过程)。至于为什么返回参数本身,我想是因为类型的隐式转换,返回参数本身已经达到了和返回bool值一样的效果。

【热门文章】
【热门文章】