ruby布尔运算符或||区别

时间:2012-03-08 18:27:06

标签: ruby

  

可能重复:
  Ruby: difference between || and 'or'

在红宝石中,不是'或'和'||'同一件事情?我执行代码时会得到不同的结果。

line =""
if (line.start_with? "[" || line.strip.empty?)
  puts "yes"
end




line =""
if (line.start_with? "[" or line.strip.empty?)
  puts "yes"
end

3 个答案:

答案 0 :(得分:9)

不,两个运营商具有相同的效果,但优先级不同。

||运算符具有非常高的优先级,因此它与之前的值绑定非常紧密。 or运算符的优先级非常低,因此它的绑定程度低于其他运算符。

拥有两个版本的原因正是一个具有高优先级而另一个具有低优先级,因为这很方便。

答案 1 :(得分:3)

在第一种情况下,您使用了||由于其他答案的优先级很好,因此在声明中先于其他任何内容进行评估,使其更加清晰,添加了一些括号,您的第一个声明如下:

(line.start_with? ("[" || line.strip.empty?))

转换为

(line.start_with? ("["))

结果为FALSE

另一方面,您的第二个陈述转换为

((line.start_with? "[") or line.strip.empty?)

转换为

(FALSE or TRUE)

结果是真的

这就是我每次调用函数时都尝试使用括号的原因。 : - )

答案 2 :(得分:1)

丹尼尔是对的,更清楚:

if (line.start_with?("[") || line.strip.empty?)
  puts "yes"
end

将生成yes