# Weird behavior of case/when

**URL:** <https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059>\
**Category:** Ruby\
**Created:** [July 12, 2006, 10:34am UTC](https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059 "2006-07-12T10:34:21Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nicolas\_DesprSSSSs](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Nicolas\_DesprSSSSs](https://www.ruby-forum.com/u/Nicolas_DesprSSSSs)\
**Post date:** [July 12, 2006, 10:34am UTC](https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059/1 "2006-07-12T10:34:21Z")

</div>

I’m getting a very weird result using case/when.

$ cat test.rb  
def test(a)  
case a.class  
when Class  
puts “class”  
when String  
puts “string”  
else  
puts “else”  
end  
end

test(Float)  
test(“hello”)  
test(42)  
$ ruby test.rb  
class  
class  
class  
$ ruby --version  
ruby 1.8.4 (2005-12-24) [i686-linux]

I would have exepected the following output:

class  
string  
else

Does anyone have an explanation about this issue?

Cheers,

---

<div class="post-metadata">

**Author:** ![Nicolas\_DesprSSSSs](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Nicolas\_DesprSSSSs](https://www.ruby-forum.com/u/Nicolas_DesprSSSSs)\
**Post date:** [July 12, 2006, 10:50am UTC](https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059/2 "2006-07-12T10:50:06Z")

</div>

Nicolas Desprès schrieb:

> I’m getting a very weird result using case/when.  
> (…)

Nicolas, why do you find it weird? Have you read the documentation, for  
example

[Expressions](http://phrogz.net/ProgrammingRuby/tut_expressions.html#caseexpressions)

Regards,  
Pit

---

<div class="post-metadata">

**Author:** ![Nicolas\_DesprSSSSs](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Nicolas\_DesprSSSSs](https://www.ruby-forum.com/u/Nicolas_DesprSSSSs)\
**Post date:** [July 12, 2006, 10:46am UTC](https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059/3 "2006-07-12T10:46:50Z")

</div>

> case a.class  
> test(“hello”)  
> class  
> string  
> else
> 
> Does anyone have an explanation about this issue?
> 
> Cheers,

case uses === which is well defined for obj === class.  
What you do is checking the class of a.class which is a class itself.

To make it short: use ‘case a’ instead of ‘case a.class’

cheers

Simon

---

<div class="post-metadata">

**Author:** ![Nicolas\_DesprSSSSs](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Nicolas\_DesprSSSSs](https://www.ruby-forum.com/u/Nicolas_DesprSSSSs)\
**Post date:** [July 12, 2006, 10:50am UTC](https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059/4 "2006-07-12T10:50:28Z")

</div>

On 7/12/06, Kroeger, Simon (ext) [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> case uses === which is well defined for obj === class.  
> What you do is checking the class of a.class which is a class itself.
> 
> To make it short: use ‘case a’ instead of ‘case a.class’

Thank you. I knew that case uses === but I would have never expected  
that it behaves this way.

Regards,

---

<div class="post-metadata">

**Author:** ![Nicolas\_DesprSSSSs](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/74df32/32.png) [@Nicolas\_DesprSSSSs](https://www.ruby-forum.com/u/Nicolas_DesprSSSSs)\
**Post date:** [July 13, 2006, 9:46pm UTC](https://www.ruby-forum.com/t/weird-behavior-of-case-when/98059/5 "2006-07-13T21:46:19Z")

</div>

Nicolas DesprÃ¨s wrote:

> Regards,

It should behave that in a language where classes are objects 😃 (unlike  
java where instances of java.lang.Class are just proxies to vm  
internals)

lopex
