Weird behavior of case/when

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,

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

http://phrogz.net/ProgrammingRuby/tut_expressions.html#caseexpressions

Regards,
Pit

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

On 7/12/06, Kroeger, Simon (ext) [email protected] 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,

Nicolas Desprès wrote:

Regards,

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

lopex

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs