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

时间:2009-09-16 18:57:07

标签: ruby operators logical-operators

我想知道为什么ruby给予andor优先于&&||和赋值运算符?有什么理由吗?

5 个答案:

答案 0 :(得分:15)

我猜这是Perl的直接结转。运算符orand稍后在Perl 5中添加,因为特定情况需要较低的优先级。

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

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

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

Ruby中的一个示例,您可以使用or但不能使用||

value = possibly_false or raise "foo"

如果您使用||,则会出现语法错误。

答案 1 :(得分:8)

区别优先。 ||&&的优先级高于=,但andor的优先级较低。所以你可以这样做:

a = nil || 0

你必须这样做:

a = (nil or 0)

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

a = nil or 0

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

答案 2 :(得分:5)

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

我认为这个想法专门用于将它们置于赋值运算符之下,因此您可以编写带有赋值的逻辑测试但没有parens。