case
when x==1 or x==2
print “yeoh!”
end
SyntaxError: compile error
(irb):17: syntax error, unexpected kOR, expecting kTHEN or ‘:’ or ‘\n’
or ‘;’
when x==1 or x==2
^
“or” and “and” both exhibit the behaviour in ruby1.8/1.9.
workaround
1 put parens around the condition (not again)
2 replace or/and with ||/&&
i believe there are other similar quirks when using “and/or”…
has ruby relegated the use of “and/or”…?
i believe there are other similar quirks when using “and/or”…
has ruby relegated the use of “and/or”…?
No, but it’s essentially inherited from perl. These operators have
extremely low precedence, so without parens your statement was being
parsed as something like
(when x==1) or x==2
I think the typical perl use is something like:
open F, “foo” or die “Oops”;
If you use || then you need extra params so you don’t get
open(F, “foo” || die “Oops”);
But if you rely on poetry mode like this it may still trip you up. IMO
you’re better off with:
a = (some-expr) || (raise “Oops”)
a = (some-expr) || raise(“Oops”)
No, but it’s essentially inherited from perl. These operators have
extremely low precedence, so without parens your statement was being
parsed as something like
(when x==1) or x==2
I think the typical perl use is something like:
…
but brian, i’m still inside the “case” block. can’t ruby sense that?