I’ve not found this stated clearly enough elsewhere so I’m doing so myself.
Ruby’s case statement calls the
=== method on the argument to each of the when statements
So, this example:
case my_number when 6883 :prime end
6883 === my_number
This is all fine and dandy, because the
=== method on a Fixnum instance does what you’d expect in this scenario.
=== method on the Fixnum class does something different. It’s an alias of
That is cute, because it allows you to do this:
case my_number when Fixnum "Easy to memorize" when Bignum "Hard to memorize" end
But it won’t work as you might expect in this scenario:
my_type = Fixnum case my_type when Fixnum "Fixed number" end
This won’t work because
Fixnum === Fixnum returns
false because the
Fixnum class is not an instance of
My workaround for this is to convert it to a string first. Not sure if that’s the best solution, but it works for me(tm).
my_type = Fixnum case my_type.to_s when "Fixnum" "Fixed number" end