我想知道为什么 ruby 给予and
,or
的优先级低于&&
,||
和 assign 运算符?有什么理由吗?
问问题
1224 次
5 回答
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"
如果你使用||
,那将是一个语法错误。
于 2009-09-16T20:32:36.313 回答
8
区别在于优先级。||
,&&
的优先级高于=
, 但and
,or
的优先级较低。所以虽然你可以这样做:
a = nil || 0
你必须这样做:
a = (nil or 0)
以获得相同的效果。如果你这样做:
a = nil or 0
表达式的结果仍为 0,但值将为 nil。
于 2009-09-17T09:56:13.450 回答
5
它们的优先级非常低,因此操作数不必用括号括起来,就像&&
and有时那样||
。
于 2009-09-16T19:00:49.103 回答
4
能够控制运算符的优先级有时很有用,尤其是当您关心可读性时——条件语句中的额外括号有时会掩盖实际逻辑。
不过,坦率地说,我认为 Ruby 之所以具有布尔运算符优先级,主要是因为 Matz 在编写 Ruby 之前是一名 Perl 程序员,并且从该语言中借用了许多核心语法和运算符。
于 2009-09-16T19:00:08.560 回答
2
我相信这个想法是专门让它们低于赋值运算符,所以你可以编写带有赋值但没有括号的逻辑测试。
于 2009-09-16T20:02:28.977 回答