sar*_*unw 10 ruby operators logical-operators
我不知道为什么红宝石给and,or少优先级比&&,||和赋值运算符?有什么缘故吗?
JRL*_*JRL 15
我猜这是Perl的直接结转.运营商or和and进行在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,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.