why cannot i put conditions in when clause

J

Junkone

irb(main):003:0> case a
irb(main):004:1> when 0
irb(main):005:1> puts "0"
irb(main):006:1> when >0
irb(main):007:1> puts "greater"
irb(main):008:1> end
SyntaxError: compile error
(irb):6: syntax error, unexpected '>'
when >0
^
from (irb):8
 
P

Phillip Gawlowski

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Junkone wrote:
| irb(main):003:0> case a
| irb(main):004:1> when 0
| irb(main):005:1> puts "0"
| irb(main):006:1> when >0
| irb(main):007:1> puts "greater"
| irb(main):008:1> end
| SyntaxError: compile error
| (irb):6: syntax error, unexpected '>'
| when >0
| ^
| from (irb):8
|

That's what if..else..end is there for.

In a case statement you usually check against 'known' and well-defined
states. Also, once a condition is met in a case statement, no other
branches are evaluated. So, if you had 'when < 1' that wouldn't be
evaluated, even id a = 2.

- --
Phillip Gawlowski
Twitter: twitter.com/cynicalryan
Blog: http://justarubyist.blogspot.com

10 years old is a good age to get stuck at.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkhIJQMACgkQbtAgaoJTgL/PdACgl0ZgF5lF/X8wKPql1h/+Y+/s
BbcAn3KLQdeiCg2iYEsx2jr1MzKsBLPY
=L4oU
-----END PGP SIGNATURE-----
 
J

Joel VanderWerf

Junkone said:
irb(main):003:0> case a
irb(main):004:1> when 0
irb(main):005:1> puts "0"
irb(main):006:1> when >0
irb(main):007:1> puts "greater"
irb(main):008:1> end
SyntaxError: compile error
(irb):6: syntax error, unexpected '>'
when >0
^
from (irb):8

It's not an expression.

You can do this:

case
when a==0
when a>0
end

or

case a
when 0
when 0..MAX_EXPECTED_VALUE_FOR_A
end
 
J

James Gray

irb(main):006:1> when >0

Idea #1:

when 0..(1.0/0.0)

Idea #2:

case # note that I have removed the a
# ...
when a > 0

Hope that helps.

James Edward Gray II
 
R

Robert Klemme

irb(main):003:0> case a
irb(main):004:1> when 0
irb(main):005:1> puts "0"
irb(main):006:1> when >0
irb(main):007:1> puts "greater"
irb(main):008:1> end
SyntaxError: compile error
(irb):6: syntax error, unexpected '>'
when >0
^
from (irb):8

You can:

$ ruby -ce 'case;when a == 0;puts "0";when a > 0;puts "greater";end'
Syntax OK


This is the second form of "case".

Btw, there is also another way: define a criteria that implements === as

irb(main):001:0> POS = Object.new
=> #<Object:0x7ff9e244>
irb(main):002:0> def POS.===(x) x > 0 end
=> nil
irb(main):003:0> a=10
=> 10
irb(main):004:0> case a
irb(main):005:1> when 0
irb(main):006:1> puts "0"
irb(main):007:1> when POS
irb(main):008:1> puts "positive"
irb(main):009:1> end
positive
=> nil
irb(main):010:0>

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top