Object Creation and Initialization

Objects are typically created in Ruby by calling the new method of their class. This section explains exactly how that works, and it also explains other mechanisms (such as cloning and unmarshaling) that create objects. Each subsection explains how you can customize the initialization of the newly created objects.

new, allocate, and initialize

Every class inherits the class method new. This method has two jobs: it must allocate a new object—actually bring the object into existence—and it must initialize the object. It delegates these two jobs to the allocate and initialize methods, respectively. If the new method were actually written in Ruby, it would look something like this:

def new(*args)
  o = self.allocate   # Create a new object of this class
  o.initialize(*args) # Call the object's initialize method with our args
  o                   # Return new object; ignore return value of initialize
end

allocate is an instance method of Class, and it is inherited by all class objects. Its purpose is to create a new instance of the class. You can call this method yourself to create uninitialized instances of a class. But don’t try to override it; Ruby always invokes this method directly, ignoring any overriding versions you may have defined.

initialize is an instance method. Most classes need one, and every class that extends a class other than Object should use super to chain to the initialize method of the superclass. The usual job of the initialize method is to create instance ...

Get The Ruby Programming Language now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.