[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Why does this parse?

Michael Campbell

11/25/2004 6:03:00 PM

Just ran down an interesting 'bug' in my code, but I'm confused as to
why it parses at all. Can someone explain to me what the parser is
doing in this case? (Please cc: me directly also please; I don't
want to miss the answer.)

if (x != y ||
x != z
y != z)
puts "foo"
end


(notice the missing "||" after the second comparison)


2 Answers

ts

11/25/2004 6:10:00 PM

0

>>>>> "M" == Michael Campbell <michael.campbell@gmail.com> writes:

M> if (x != y ||
M> x != z
M> y != z)
M> puts "foo"
M> end

ruby see it as a block, the last expression will give it the value for the
test

uln% ruby -e 'if (1 != 1 || 1 != 1; 1); puts "ok"; end'
ok
uln%

uln% ruby -e 'if (1 != 1 || 1 != 1; nil); puts "ok"; end'
uln%


Guy Decoux


Shashank Date

11/25/2004 6:13:00 PM

0

Michael Campbell wrote:
> Just ran down an interesting 'bug' in my code, but I'm confused as to
> why it parses at all. Can someone explain to me what the parser is
> doing in this case? (Please cc: me directly also please; I don't
> want to miss the answer.)
>
> if (x != y ||
> x != z
> y != z)
> puts "foo"
> end
>

My guess: it is parsing it as two expressions, like so:

if ( x != y || x != z; y != z )
<--- first -----> <-- 2nd -->

Ruby is very expressio-oriented.

> (notice the missing "||" after the second comparison)

HTH,
-- shanko