[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

why cannot i put conditions in when clause

Junkone

6/5/2008 5:27:00 PM

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
6 Answers

Phillip Gawlowski

6/5/2008 5:39:00 PM

0

-----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.bl...

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....

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

Joel VanderWerf

6/5/2008 5:41:00 PM

0

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

James Gray

6/5/2008 5:44:00 PM

0

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 Gray II

unbewusst.sein

6/5/2008 5:51:00 PM

0

James Gray <james@grayproductions.net> wrote:

> Idea #1:
>
> when 0..(1.0/0.0)

;-)
--
Une Bévue

Robert Klemme

6/5/2008 6:39:00 PM

0

On 05.06.2008 19:26, 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

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

Avdi Grimm

6/5/2008 7:15:00 PM

0

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

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:...
Developer Blog: http:.../devblog/
Twitter: http://twitte...
Journal: http://avdi.livej...