【发布时间】:2021-03-05 18:10:33
【问题描述】:
在 Ruby 中,对于二元逻辑运算符 AND 和 OR,术语的求值顺序是什么,即在类似指令中
if bool1 || bool2
首先检查哪个布尔值?正如直觉所暗示的那样,它是从左到右吗?如果第一个已经为真(或者在 AND 的情况下为假),是否需要检查两者?
这在需要检查 2 个条件时特别有用,但我们只对验证第二个条件(例如,更消耗资源的检查)真正感兴趣,前提是第一个条件失败。
搜索此信息通常会导致运算符优先级表和特别是运算符关联性,但正如您所见,这不是我要查找的内容。
【问题讨论】:
-
Ruby 使用短路评估,因此它评估第一个参数以决定是否应该继续使用第二个参数。
-
Ruby 主义者经常编写依赖于从左到右、短路求值的代码,例如
result = obj.is_a?(Hash) && obj[k]。 -
值得注意的是,当使用
|而不是||时,双方都在进行评估。有关示例,请参见TrueClass#|。
标签: ruby operators boolean-logic