||运算符,结果已知时返回?

时间:2011-03-11 21:10:10

标签: ruby short-circuiting

我有类似以下的功能:

def check
  return 2 == 2 || 3 != 2 || 4 != 5
end

我的问题是,Ruby会执行所有比较,即使第一个是真的,因此函数返回true。我的检查要密集得多,所以我想知道我是否应该以不同的方式解决这个问题,以避免每次都进行所有检查。

irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5
=> true

谢谢。

5 个答案:

答案 0 :(得分:15)

Ruby使用short-circuit evaluation

这适用于两个||和&&。

  • 使用||如果左操作数是真实的,则不评估右操作数。
  • 如果左操作数是假的,则&&不会评估右操作数。

答案 1 :(得分:5)

第一个条件为真时,

||短路。所以是的,如果你把最昂贵的条件放在最后,它会有所帮助。

答案 2 :(得分:2)

||将默认短路评估,这意味着一旦遇到第一个“真实”表达式,它将停止评估(除非您明确声明您希望所有表达式使用'或'运算符进行评估)。

参考:

http://en.wikipedia.org/wiki/Short-circuit_evaluation

答案 3 :(得分:0)

只要其中一个条件为真,该函数就会返回。

答案 4 :(得分:0)

你可以用irb自己测试一下,像这样:

irb> p('Hello') || p('World')

我们知道函数p打印其参数(以inspect方式)然后返回它们,所以如果||短路,只打印"Hello",否则会打印"Hello""World"

您还可以使用&&代替puts来测试逻辑p运算符,因为puts始终返回nil

顺便说一下,irb是一个玩红宝石的好地方。您可以测试那里的所有内容,除了一小部分并发。