Ruby で initialize が呼ばれる順番を調べる
Ruby
Published: 2019-07-16

やったこと

Ruby で initialize が呼び出される順番を調べます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

module と 親クラスがある場合

test.rb

module SampleModule
  def initialize
    p "1: #{self.class} #{__method__}"
  end
end

class Parent
  def initialize
    p "2: #{self.class} #{__method__}"
  end
end

class Child < Parent
  include SampleModule

  def initialize
    super
    p "3: #{self.class} #{__method__}"
  end
end

出力結果

$ ruby test.rb
"1: Child initialize"
"3: Child initialize"

親クラスがある場合

test.rb

class Parent
  def initialize
    p "2: #{self.class} #{__method__}"
  end
end

class Child < Parent
  def initialize
    super
    p "3: #{self.class} #{__method__}"
  end
end

出力結果

$ ruby test.rb
"2: Child initialize"
"3: Child initialize"

module と親クラスが両方ある場合、super で呼び出されるのは module のメソッドであることが分かりました。