Andrew Grimm
Andrew Grimm

Reputation: 81570

Is everything an object in ruby?

Is everything in ruby an object? Does this include Fixnums?

Upvotes: 20

Views: 12825

Answers (6)

mistertim
mistertim

Reputation: 5303

Ruby doen't have any primitives (like int, char etc in java), so every value (anything that can sit on the right of an assignment statement) is an object. However, control statements, methods, and other features of the language syntax aren't.

Upvotes: 2

Dan Garland
Dan Garland

Reputation: 3419

Practically everything in Ruby is an Object, with the exception of control structures. Whether or not under the covers a method, code block or operator is or isn't an Object, they are represented as Objects and can be thought of as such.

Take a code block for example:

def what_is(&block)
  puts block.class
  puts block.is_a? Object
end

> what_is {}
Proc
true
=> nil

Or for a Method:

class A
  def i_am_method
    "Call me sometime..."
  end
end

> m = A.new.method(:i_am_method)
> m.class
Method
> m.is_a? Object
true
> m.call
"Call me sometime..."

And operators (like +, -, [], <<) are implemented as methods:

class String
  def +
    "I'm just a method!"
  end
end

For people coming into programming for the first time, what this means in a practical sense is that all the rules that you can apply to one kind of Object can be extended to others. You can think of a String, Array, Class, File or any Class that you define as behaving in much the same way. This is one of the reasons why Ruby is easier to pick up and work with than some other languages.

Upvotes: 5

Amadan
Amadan

Reputation: 198436

Depends on what you mean by "everything". Fixnums are, as the others have demonstrated. Classes also are, as instances of class Class. Methods, operators and blocks aren't, but can be wrapped by objects (Proc). Simple assignment is not, and can't. Statements like while also aren't and can't. Comments obviously also fall in the latter group.

Most things that actually matter, i.e. that you would wish to manipulate, are objects (or can be wrapped in objects).

Upvotes: 51

Dex
Dex

Reputation: 12759

Yup.

> Fixnum.is_a?(Object)   #=> true

To see the chain of inheritance:

> pp Fixnum.ancestors
[Fixnum,
 Integer,
 Precision,
 Numeric,
 Comparable,
 Object,
  ...
 Kernel]
 => nil 

Upvotes: 1

jtbandes
jtbandes

Reputation: 118731

Yes. Fixnum is a class, which inherits from Integer, which inherits from Numeric, which finally inherits from Object.

Or, why don't you just ask it? :)

1.is_a? Object # => true
1.class # => Fixnum
Fixnum.is_a? Object # => true

Reading the Ruby info and documentation on the website is a good idea too.

Upvotes: 7

Alan
Alan

Reputation: 46873

Yes everything is an object in ruby, and that includes Fixnum

Upvotes: 2

Related Questions