伝統的かどうかわからないが、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
- 作者: Peter J. Jones,arton,長尾高弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/09
- メディア: 大型本
- この商品を含むブログ (13件) を見る
Ruby on Rails 5アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2017/04/14
- メディア: 大型本
- この商品を含むブログを見る
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る