class() vs. type() in Ruby

Viewed 45400

What's the difference between the class and type methods in Ruby? I've noticed that type works to find the type of some classes but not others.

2 Answers

The key difference is that Object#type is deprecated. From the RDoc for Object#type:

Deprecated synonym for Object#class.

Here's why you should use Object#class:

Returns the class of obj, now preferred over Object#type, as an object‘s type in Ruby is only loosely tied to that object‘s class. This method must always be called with an explicit receiver, as class is also a reserved word in Ruby.

In reality, you probably want to use Object#respond_to? instead of checking for the class of an object in most cases.

#type is a synonym for #class, but it's deprecated in ruby 1.8, and apparently gone from ruby 1.9. Just use #class everywhere.


# For ruby 1.8

$ ri Object#type
------------------------------------------------------------ Object#type
     obj.type   => class
------------------------------------------------------------------------
     Deprecated synonym for Object#class.


# For ruby 1.9

$ ri1.9 Object#type
Nothing known about Object#type
Related