Rubyのコンストラクタについて
コンストラクタ - RubyBeginner (ルビギナー)の世にも奇妙な開発
エイリアスではない。Class#newがそう定義しているだけ。
Rubyはクラスそのものがオブジェクト…つまりClassクラスのインスタンスになっている。
class Hoge end Hoge.class # => Class Object.class # => Class
で、Classのインスタンスメソッドnew(Class#new)は「オブジェクトの領域確保をし、そのオブジェクトのinitializeメソッドを呼び、そのオブジェクトを返す」メソッドとして定義されている。あえてRubyで書くとこんなの。
class Class def new(*args, &block) o = allocate o.__send__(:initialize, *args, &block) o end end
で、Hoge.newが呼び出されたときどうなるかというと、
だから、Hogeオブジェクトの領域確保がされて、Hoge#initializeが呼ばれて、作成したHogeオブジェクトが返される。