4

I want to know if there is any ruby function or method to find out the type of object (Integer, String, Symbol, etc.).

Gupta
  • 8,882
  • 4
  • 49
  • 59
John Doe
  • 81
  • 1
  • 1
  • 4

3 Answers3

16

The assumption you've made is that if the value returned by a mathematical operation is an integer, the value's class will be Fixnum. That's not correct.

Take a look:

a = 5
puts a.class
# => Fixnum

b = 5.0
puts b.class
# => Float

Mathematically speaking, 5 and 5.0 are the same number and that number is an integer. But 5 and 5.0 in Ruby (like many other programming languages) are not the same. One is a fixed-point value (ergo Fixnum) and the other is a floating-point value (Float). A Fixnum can represent integers only, but a Float can represent both integers and fractions (but, it behooves me to mention, not all fractions).

In Ruby, when you do a mathematical operation with two Fixnums, a Fixnum is returned:

a = 4
puts a.class # => Fixnum

x = a ** 2
puts x       # => 16
puts x.class # => Fixnum

However, if either number is a Float, a Float is returned:

a = 4

x = a ** 2.0
puts x       # => 16.0
puts x.class # => Float

b = 4.0
puts b.class # => Float

y = b ** 2
puts y       # => 16.0
puts y.class # => Float

y = b ** 2.0
puts y       # => 16.0
puts y.class # => Float

You asked how to "find the type of an object," and the answer to that question is to use the Object#class method, as above. But as you can see, "Is the object a Fixnum?" and "Is the object an integer?" are two different questions.

If you want to know if a number in Ruby is an integer even if it's a Float, refer to the excellent answers to this question: Checking if a Float is equivalent to an integer value in Ruby

Community
  • 1
  • 1
Jordan Running
  • 102,619
  • 17
  • 182
  • 182
8

You could call class method on object

obj.class

For Instances

:test_1.class => Symbol

Or you could also Used: instance_of? Method

puts 10.instance_of? Fixnum    #=> True
puts [1,2].instance_of? Array  #=> True

for more Info you could determining-type-of-an-object-in-ruby see this

NoDataDumpNoContribution
  • 10,591
  • 9
  • 64
  • 104
Gupta
  • 8,882
  • 4
  • 49
  • 59
-1

42 is an instance of Fixnum, Fixnum is a subclass of Numeric. 4.2 is an instance of Float, Float is a subclass of Numeric as well.

42.kind_of? Numeric
=> true

(4.2).kind_of Numeric
=> true
bogl
  • 1,864
  • 1
  • 15
  • 32