2009-09-16 26 views

回答

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" 

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

+0

是否有一个do_something的成语或死亡的名称?它是否用于红宝石? – 2009-09-17 00:59:00

+0

我不知道它的名字,但它在Ruby中很常见。 – Chuck 2009-09-17 03:08:58

+0

Perl严重依赖死亡,而Ruby使用raise。例外的好处是你可以解救它。 – tadman 2009-09-17 15:20:48

4

能够控制操作符的优先级有时很有用,特别是如果您关心可读性 - 条件语句中的额外括号有时可能会掩盖实际的逻辑。坦率地说,我认为Ruby具有布尔运算符优先级的原因主要来自Matz在写Ruby之前是Perl程序员的事实,并且从核心语法和运算符中借用了大量的核心语法和运算符那种语言。

+0

嗯,这就解释了为什么红宝石是如此不成熟,同时臃肿。仍然很难包围我的头.. – akostadinov 2014-06-03 16:37:45

5

它们的优先级非常低,所以操作数不必包含在圆括号中,有时与&&||的情况一样。

2

我相信这个想法是专门让他们在赋值运算符之下,所以你可以编写逻辑测试但没有parens。

7

区别是优先。 ||,&&的优先级高于=,但and,or的优先级较低。因此,尽管你可以这样做:

a = nil || 0 

你必须做的:

a = (nil or 0) 

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

a = nil or 0 

表达式的结果仍然是0,但值将为零。

相关问题