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 布尔运算符或 ||差异[重复]的主要内容,如果未能解决你的问题,请参考以下文章