Ruby布尔运算符or ||的区别

6
在Ruby中,“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个回答

9

不,这两个运算符具有相同的作用但不同的优先级。

|| 运算符具有非常高的优先级,因此它与前一个值紧密绑定。而 or 运算符具有非常低的优先级,因此它比另一个运算符绑定得更松散。

之所以有两个版本,正是因为一个具有高优先级,另一个具有低优先级,这样很方便。


如果第一条语句的评估结果类似于 ("[" || line.strip.empty?) = "[",然后 (line.start_with? "[")。 - surajz
1
没错。优先级是一种猜测你在省略括号时所指的方式。就像数学中的优先级一样。 - Daniel Pittman

3
在第一种情况下,您使用了“||”,由于其他答案所述的优先级,该运算符在语句中执行的优先级高于任何其他操作。为了更加清晰,我们添加了括号,您的第一个语句应该像这样:
(line.start_with? ("[" || line.strip.empty?))

这意味着

(line.start_with? ("["))

结果为 FALSE。

另一方面,您的第二个语句翻译为:

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

这意味着

(FALSE or TRUE)

结果为真。

这就是为什么我每次调用函数时都尽量使用括号。 :-)


1

Daniel 是正确的,更明确地说:

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

将会生成yes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接