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を呼び出し、インスタンスを返します。新しいインスタンスは、無名のクラスとなります。