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
-----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 G.
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-----
Junkone wrote:
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
On Jun 5, 2008, at 12:29 PM, Junkone wrote:
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 G. II
On 05.06.2008 19:26, Junkone wrote:
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 Thu, Jun 5, 2008 at 1:40 PM, Joel VanderWerf
[email protected] wrote:
You can do this:
case
when a==0
when a>0
end
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
–
Avdi
Home: http://avdi.org
Developer Blog: Avdi Grimm, Code Cleric
Twitter: http://twitter.com/avdi
Journal: http://avdi.livejournal.com