Ruby – Determining type of an object in ruby

rubytypes

I'll use python as an example of what I'm looking for (you can think of it as pseudocode if you don't know Python):

>>> a = 1
>>> type(a)
<type 'int'>

I know in ruby I can do :

1.9.3p194 :002 > 1.class
 => Fixnum 

But is this the proper way to determine the type of the object?

Best Answer

The proper way to determine the "type" of an object, which is a wobbly term in the Ruby world, is to call object.class.

Since classes can inherit from other classes, if you want to determine if an object is "of a particular type" you might call object.is_a?(ClassName) to see if object is of type ClassName or derived from it.

Normally type checking is not done in Ruby, but instead objects are assessed based on their ability to respond to particular methods, commonly called "Duck typing". In other words, if it responds to the methods you want, there's no reason to be particular about the type.

For example, object.is_a?(String) is too rigid since another class might implement methods that convert it into a string, or make it behave identically to how String behaves. object.respond_to?(:to_s) would be a better way to test that the object in question does what you want.