我想知道为什么ruby给予and
,or
优先于&&
,||
和赋值运算符?有什么理由吗?
答案 0 :(得分:15)
我猜这是Perl的直接结转。运算符or
和and
稍后在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)
区别优先。 ||
,&&
的优先级高于=
,但and
,or
的优先级较低。所以你可以这样做:
a = nil || 0
你必须这样做:
a = (nil or 0)
获得相同的效果。如果你这样做:
a = nil or 0
表达式的结果仍为0,但值为nil。
答案 2 :(得分:5)
它们具有非常低的优先级,因此操作数不必包含在括号中,有时&&
和||
也是如此。
答案 3 :(得分:4)
能够控制运算符的优先级有时很有用,特别是如果您关注可读性 - 条件语句中的额外括号有时会掩盖实际逻辑。
坦率地说,我认为Ruby具有布尔运算符优先级的原因主要源于Matz在编写Ruby之前是Perl程序员的事实,并从中借用了大部分核心语法和运算符。语言。
答案 4 :(得分:2)
我认为这个想法专门用于将它们置于赋值运算符之下,因此您可以编写带有赋值的逻辑测试但没有parens。