我有一个类似于以下的功能:
def check
return 2 == 2 || 3 != 2 || 4 != 5
end
我的问题是,即使第一个为真,Ruby 是否会执行所有比较,因此函数返回真。我的检查更加密集,所以我想知道我是否应该以不同的方式将其分解,以避免每次都进行所有检查。
irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5
=> true
谢谢你。
我有一个类似于以下的功能:
def check
return 2 == 2 || 3 != 2 || 4 != 5
end
我的问题是,即使第一个为真,Ruby 是否会执行所有比较,因此函数返回真。我的检查更加密集,所以我想知道我是否应该以不同的方式将其分解,以避免每次都进行所有检查。
irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5
=> true
谢谢你。
||
一旦第一个条件为真,短路。所以,是的,如果你把最昂贵的条件放在最后,那会有所帮助。
|| 默认情况下会短路评估,这意味着一旦遇到第一个“真”表达式,它将停止评估(除非您明确声明您希望所有表达式都使用“或”运算符进行评估)。
参考:
只要其中一个条件为真,函数就会返回。
你可以在 irb 中自己测试,如下所示:
irb> p('Hello') || p('World')
正如我们所知,该函数p
(以某种方式)打印其参数inspect
然后返回它们,因此如果||
短路,则仅"Hello"
打印,否则两者"Hello"
都"World"
打印。
您还可以像往常一样使用 return 来测试逻辑&&
运算符,方法是使用puts
而不是。p
puts
nil
顺便说一句,irb 是玩红宝石的理想场所。您可以在那里测试所有内容,除了一小部分并发性。