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
Expressions
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
(unlike
java where instances of java.lang.Class are just proxies to vm
internals)
lopex