webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

Rubyをもう一歩進んで勉強する8章(initializeメソッドについて)

伝統的かどうかわからないが、RubyはJavaなどにあるようなコンストラクタを持っておらず、代わりにnewメソッドから呼ばれるinitializeという特別なメソッドを定義することによりオブジェクトを初期化することができます。

特に定義しなければ、BasicObjectクラスに定義されているinitializeメソッドが呼ばれますが、中身は空なので何も起こりません。

initializeメソッドもほかのメソッドと同じくようにメソッド探索を行い、最初に見つかったinitializeメソッドを実行します。

スポンサーリンク

したがって、次のような例では、親クラスのinitializeメソッドは実行されません。

class Parent
  attr_accessor :name

  def initialize(name)
    @name = name
  end
end

class Child < Parent
  attr_accessor :grade

  def initialize(grade)
    @grade = grade
  end
end

なので、親クラスのinitializeも実行するためには、superを用いる必要があります。

ただし、前回の記事で描いたように、引数には注意が必要です。

class Parent
  attr_accessor :name

  def initialize(name)
    @name = name
  end
end

class Child < Parent
  attr_accessor :grade

  def initialize(name, grade)
    super(name)
    @grade = grade
  end
end

Effective Ruby

Effective Ruby

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング