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
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.
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
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
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
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
···
On Jun 5, 2008, at 12:29 PM, Junkone wrote:
irb(main):006:1> when >0
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 >0:
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
···
On 05.06.2008 19:26, Junkone wrote:
![]()
···
James Gray <james@grayproductions.net> wrote:
Idea #1:
when 0..(1.0/0.0)
--
Une Bévue
First of all: huh. Learn something new about Ruby (almost) every day.
That said - why would you do this rather than an if/elsif? I'm
genuinely curious. E.g.
if a == 0 then ...
elsif a>0 then ...
end
···
On Thu, Jun 5, 2008 at 1:40 PM, Joel VanderWerf <vjoel@path.berkeley.edu> wrote:
You can do this:
case
when a==0
when a>0
end
--
Avdi
Home: http://avdi.org
Developer Blog: Avdi Grimm, Code Cleric
Twitter: http://twitter.com/avdi
Journal: http://avdi.livejournal.com