ruby 布尔运算符或 ||差异[重复]

Posted

技术标签:

【中文标题】ruby 布尔运算符或 ||差异[重复]【英文标题】:ruby boolean operator or || difference [duplicate] 【发布时间】:2012-03-26 05:46:15 【问题描述】:

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

在 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

【问题讨论】:

【参考方案1】:

不,这两个运算符的效果相同,但优先级不同。

|| 运算符具有非常高的优先级,因此它与前一个值的绑定非常紧密。 or 运算符的优先级很低,因此它的绑定没有其他运算符那么紧密。

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

【讨论】:

所以如果第一个语句的计算结果类似于 ("[" || line.strip.empty?) = "[" 然后是 (line.start_with?"[")。 正是如此。优先级是一种在您省略时猜测您的意思的方法,例如括号。就像数学优先一样。【参考方案2】:

在您使用的第一种情况下 ||由于其他答案很好地说明了优先级,因此在语句中的任何其他内容之前都对其进行了评估,添加了一些括号使其更加清晰,您的第一个语句就像:

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

至于翻译成

(line.start_with? ("["))

结果为假

另一方面,您的第二个语句转换为

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

至于翻译成

(FALSE or TRUE)

结果为真

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

【讨论】:

【参考方案3】:

丹尼尔是对的,更清楚:

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

将产生yes

【讨论】:

以上是关于ruby 布尔运算符或 ||差异[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby问号运算符,这是啥意思? [复制]

r值和l值之间的差异[重复]

||= 在Ruby中做了啥[重复]

如何不应用布尔运算符,以及[重复]

Ruby比较运算符? == 与 === [重复]

Ruby语法“OR”运算符[重复]