Rubyのnewとは何か

Rubyの「クラス.new」のnewは、C++Javaのように文法の要素ではなく、ただのメソッドです。Classクラスのインスタンスメソッドnew(Class#new)です。

標準クラスのStringや自作クラスのBookは、クラス名であると同時に、Classクラスのインスタンスを指している変数でもあります。変数名が大文字で始まっているので定数である変数です。

「Book.new」とすると、変数BookはClassクラスのインスタンスですから、Class#newが呼ばれます(ただし、Bookに特異メソッドnewがあればそちらが優先されます)。

Class#newは、新しいインスタンスを作成し、インスタンスに対してinitializeメソッドを呼び出し、インスタンスを返します。C言語で実装されていますが、Rubyで書きなおすと次のような感じです。

class Class
  def new(*args)
    puts 'new is called'
    obj = allocate
    obj.send(:initialize, *args)
    obj
  end
end
 
class Book
  def initialize(title)
    puts 'initialize is called'
    @title = title
  end
end
 
Book.new('Programming Ruby')

この結果「new is called」「initialize is called」が表示されます。

さて、「Class.new」とした場合はどうなるか。この場合も変数ClassはClassクラスのインスタンスなので、Class#newが呼ばれます。Class#newは新しいインスタンスを作成し、Class#initializeを呼び出し、インスタンスを返します。新しいインスタンスは、無名のクラスとなります。