What on earth

a = 5
puts Fixnum == a.class # spits out true

spits out “Who knows what I am. :-(”

case a.class
when Fixnum
puts “I’m a fixnum!”
else
puts “Who knows what I am. :-(”
end

What’s going on here?

Joe

case uses === for comparison, not ==

In my irb, Fixnum === 5.class => false

As for why === gives false, I have no idea. In the mean time, you
could use

case a.class.to_s
when “Fixnum”
puts …
else
puts …
end

Tim

On 22-Mar-06, at 9:51 PM, Joe Van D. wrote:

What’s going on here?

case doesn’t use == you can do this:

a = 5

case a
when Fixnum
puts “I’m a fixnum”
else
puts “other”
end

and by coincidence (not)

ratdog:~/tmp mike$ irb
irb(main):001:0> a = 5
=> 5
irb(main):002:0> Fixnum === a
=> true

ratdog:~/tmp mike$ ri Module#===
------------------------------------------------------------- Module#===
mod === obj => true or false

  Case Equality---Returns +true+ if _anObject_ is an instance of
  _mod_ or one of _mod_'s descendents. Of limited use for modules,
  but can be used in +case+ statements to classify objects by class.

Hope this helps,

Mike

Mike S. [email protected]
http://www.stok.ca/~mike/

The “`Stok’ disclaimers” apply.

class.

Ok, out of the three of us that responded, Mike is the one who knows
what he’s talking about most. Listen to him.

Tim

On 3/22/06, Mike S. [email protected] wrote:

else
case a
when Fixnum
puts “I’m a fixnum”
else
puts “other”
end

Very nice, thanks! Less code is always better.