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

Gun*_*ner 10 ruby short-circuiting

我有一个类似于以下的功能:

def check
  return 2 == 2 || 3 != 2 || 4 != 5
end
Run Code Online (Sandbox Code Playgroud)

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

irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5
=> true
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mar*_*ers 15

Ruby使用短路评估.

这同样适用于|| 和&&.

  • 有了||正确的操作数不评估,如果左操作truthy.
  • 有了&&正确的操作数不评估,如果左操作falsy.


sep*_*p2k 5

||一旦第一个条件成立,就会短路.所以是的,如果你把最昂贵的条件放在最后,它会有所帮助.


krt*_*tek 0

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