Ruby中的“和”,“或”运算符背后有智慧吗?

我想知道为什么ruby给予and / or优先于&&|| ,并分配运营商? 有什么缘故吗?

我猜这是Perl的直接结转。 运营商or和之后在Perl 5中针对特定情况添加的是优先级较低的优先级。

例如,在Perl中,我们希望在这里|| 优先级较低,以便我们可以写:

 try to perform big long hairy complicated action || die ; 

并确保|| 不会吞噬部分行动。 Perl 5引入了or||的新版本 具有低优先级,正是出于这个目的。

Ruby中的一个例子,您可以使用or不使用||

 value = possibly_false or raise "foo" 

如果你用过|| ,这将是一个语法错误。

区别在于优先权。 ||&&具有比=更高的优先级,但是, or更低。 所以你可以这样做:

 a = nil || 0 

你必须这样做:

 a = (nil or 0) 

得到同样的效果。 如果你这样做:

 a = nil or 0 

表达式的结果仍为0,但值为nil。

它们具有非常低的优先级,因此操作数不必包含在括号中,有时是&&||的情况。 。

能够控制运算符的优先级有时是有用的,特别是如果您关注可读性 – 条件语句中的额外括号有时会掩盖实际逻辑。

坦率地说,我认为Ruby具有布尔运算符优先级的原因主要源于Matz在编写Ruby之前是Perl程序员的事实,并借用了该语言的大部分核心语法和运算符。

我相信这个想法是专门让它们低于赋值运算符,所以你可以编写带有赋值的逻辑测试但没有parens。