いつもおかしな質問ばかりですみません。
いまRubyの試験を受けようと独学していますが、
クラスの継承を辿ったときのメソッドの実行順序がわかりません。
なぜ、そうなるのかもわかりません。お分かりの方、ご教授頂ければ喜びます。
Ruby技術者認定試験 合格教本というテキストがありまして、その本の基礎力確認問題というのがあります。
Goldの問題14オブジェクト指向です。
以下のコードを実行するとどうなりますか。
module Mod
def foo
puts "Mod"
end
end
class Cls1
include Mod
def foo
puts "Cls1"
super
end
end
class Cls2 < Cls1
def foo
puts "Cls2"
super
end
end
Cls2.new.foo
正解はわかりました。
Cls2
Cls1
Mod
合っていました。ところが試験ではこんな易しい問題はでません。少しいじるだけでわからなくなってしまいます。
以下のコードを実行するとどうなりますか。
module Mod
def foo
puts "Mod"
end
end
class Cls1
include Mod
def foo
super
puts "Cls1"
end
end
class Cls2 < Cls1
def foo
super
puts "Cls2"
end
end
Cls2.new.foo
まだまだ、レベルが低いため、こうなるだけでわからなくなってしまいます。
Cls2のfooを実行すると、最初にsuperがきているので、そのsuperを実行して
Cls1のfooに移り、またまた先にsuperがきているので、そのsuperを実行して
Modのfooに移り、その先はないので、そのfooを実行して、おしまい。ってことで
答えは、Mod(のみ)と考えました。
ところが、実際に実行してみると、
Mod
Cls1
Cls2
と、クラスのfooも実行されている上に、おまけにCls1、Cls2、と降りてきている。。
ああ、これがわからんようじゃあ、試験は受からんわと思いながら、なぜそう動くのかの説明を
探しても見つけることができずに消沈しております。
どなたか、わかる方いらしたら、もしくは、ここ見たら書いてあるよみたいなことでも
お教え願えないでしょうか?よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/26 03:46