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

sar*_*unw 10 ruby operators logical-operators

我不知道为什么红宝石给and,or少优先级比&&,||和赋值运算符?有什么缘故吗?

JRL*_*JRL 15

我猜这是Perl的直接结转.运营商orand进行在Perl 5以后添加针对具体情况分别为低优先级被期望的.

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

try to perform big long hairy complicated action     || die ;
Run Code Online (Sandbox Code Playgroud)

并确保||不会吞噬部分行动.引入Perl 5 or,其新版本||具有低优先级,正是出于此目的.

Ruby中的一个例子,你可以使用or但不能||:

value = possibly_false or raise "foo"
Run Code Online (Sandbox Code Playgroud)

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


And*_*ius 8

区别在于优先权.||,&&有更高的优先级=,但是and,or有更低的.所以你可以这样做:

a = nil || 0
Run Code Online (Sandbox Code Playgroud)

你必须这样做:

a = (nil or 0)
Run Code Online (Sandbox Code Playgroud)

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

a = nil or 0
Run Code Online (Sandbox Code Playgroud)

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


Chu*_*uck 5

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