Ruby技術者認定試験Goldの問題で自分で理解できない問題があるので、教えていただければ幸いです。
以下のコードを実行するとどうなりますか?
ruby
1module Mod 2 def foo 3 puts "Mod" 4 end 5end 6 7class Cls1 8 def foo 9 puts "Cls1" 10 end 11end 12 13class Cls2 < Cls1 14 include Mod 15 undef foo 16end 17 18Cls2.new.foo
答えはCls1クラスで定義されたfooは、Cls2クラスでundefにより定義が取り消されているという理由で'例外発生'になります。
僕が最初に考えついた答えは'Modを表示'でした。
理由はCls2.newでCls2クラスのインスタンを作成した後に、fooメソッドを呼び出すと。module Modのfooメソッドが呼び出されると思ったからです。
確かにundef fooでCls1クラスで定義されたfooは取り消されていますが、処理の順番的にinclude Modの下にあるので取り消される前にメソッドを呼び出せるのではないでしょうか?
回答2件
あなたの回答
tips
プレビュー