やったこと
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 のメソッドであることが分かりました。