在红宝石中,不是'或'和'||'同一件事情?我执行代码时会得到不同的结果。
line =""
if (line.start_with? "[" || line.strip.empty?)
puts "yes"
end
line =""
if (line.start_with? "[" or line.strip.empty?)
puts "yes"
end
答案 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