问题
I wonder why ruby give and
, or
less precedence than &&
, ||
, and assign operator? Is there any reason?
回答1:
My guess is that's a direct carry-over from Perl. The operators or
and and
were added later in Perl 5 for specific situations were lower precedence was desired.
For example, in Perl, here we wish that ||
had lower precedence, so that we could write:
try to perform big long hairy complicated action || die ;
and be sure that the ||
was not going to gobble up part of the action. Perl 5 introduced or
, a new version of ||
that has low precedence, for exactly this purpose.
An example in Ruby where you could use or
but not ||
:
value = possibly_false or raise "foo"
If you used ||
, it would be a syntax error.
回答2:
The difference is precedence. ||
, &&
have higher precedence than =
, but and
, or
have lower. So while you can do:
a = nil || 0
You would have to do:
a = (nil or 0)
to get same effect. If you do:
a = nil or 0
The result of expression would still be 0, but a value would be nil.
回答3:
They have very low precedence so that the operands don't have to be wrapped in parentheses, as is sometimes the case with &&
and ||
.
回答4:
Being able to control the precedence of your operators is sometimes useful, especially if you are concerned with readability -- extra parenthesis in conditional statements can sometimes obscure the actual logic.
To be frank, though, I think the reason Ruby has the boolean operator precedence levels it does stems mostly from the fact that Matz was a Perl programmer before he ever wrote Ruby, and borrowed much of the core syntax and operators from that language.
回答5:
I believe the idea is specifically to get them below the assignment operators, so you can write logic tests with assignments but without parens.
来源:https://stackoverflow.com/questions/1434842/is-there-any-wisdom-behind-and-or-operators-in-ruby