Am I fundamentally misunderstanding Ruby here? I\'ve been writing Ruby code for about 2 years now and just today stumbled on this...
ruby-1.8.7-p249 > i =
The operators &&
and and
have different precedence, and =
happens to be in between.
irb(main):006:0> i = true and false
=> false
irb(main):007:0> i
=> true
irb(main):008:0> i = true && false
=> false
irb(main):009:0> i
=> false
irb(main):010:0>
The first is read as (i = true) and false
, the second as i = (true && false)
.
Your line is parsed as
i = true and false
(i = true) and false
true and false
And of course because of i = true
, i
will be true
afterwards.
and
has lower precedence than =
so i = true and false
is parsed as (i = true) and false
.
So the value true
is assigned to i
and then the return value of that operation (which is true) is and
ed with false, which causes the whole expression to evaluate to false,
even though i
still has the value true
.
As I understand your code, it is interpreted as :
The results seems correct.
As others have elucidated above, the keyword and
is used when you want to put two different statements on one line. It is just a nicer way of making your code readable.
Thus,
i = true and false
implies i = true; false
#(a less widely used code layout in ruby)
or which is the most straightforward way:
i = true
false
So, the output is correct. Otherwise, if you were expecting false
, then use the boolean and &&
.