我想知道为什么红宝石给 and, or 优先级低于 &&, || ,并赋值运算符?有什么理由吗?

有帮助吗?

解决方案

我的猜测是这是 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"

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

其他提示

区别在于优先级。 ||, && 优先级高于 =, , 但 and, or 有较低的。所以虽然你可以这样做:

a = nil || 0

你必须这样做:

a = (nil or 0)

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

a = nil or 0

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

它们的优先级非常低,因此操作数不必括在括号中,有时会出现这种情况 &&||.

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

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

我相信这个想法是专门让它们位于赋值运算符下方,这样您就可以使用赋值但不带括号来编写逻辑测试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top