case "Hello".class
when Integer
print "A"
when String
print "B"
else
print "C"
end
Why do I get "C"? Was expecting "B" since if you evaluate "String".class you do get String.
case "Hello".class
when Integer
print "A"
when String
print "B"
else
print "C"
end
Why do I get "C"? Was expecting "B" since if you evaluate "String".class you do get String.
Confusingly, Ruby's case statement uses === to compare each case to the subject. Class#=== tests for instances of that class, but not the class itself:
> Fixnum === Integer
false
> Fixnum === 1
true
The case behavior that Ruby is trying to promote is:
case "Hello"
when Integer
puts "A"
when String
puts "B"
else
puts "C"
end