私が達成したいのは、以下のようなものです。つまり、拡張モジュール メソッドから基本クラス メソッドを呼び出します。
class BaseClass
def behavior
puts 'base class behavior'
end
end
module ChildModule
def behavior
super.behavior
puts 'child module behavior'
end
end
o = BaseClass.new
o.extend ChildModule
o.behavior
次のように出力されます (ruby 1.9.2p290 (2011-07-09 リビジョン 32553) [x86_64-linux] の場合)
base class behavior
t.rb:9:in `behavior': undefined method `behavior' for nil:NilClass (NoMethodError)
from t.rb:16:in `<main>'
私の推測では、モジュールに存在しないためsuper
、使用できないと思います。super
しかし、メソッドからその行が出力されますsuper
が、それは奇妙ですか?
上記の目的を達成するにはどうすればよいですか?
@davidracによる回答は機能していますが、もっと興味があり、知りたいのですが、基本クラスインスタンスへのハンドルを取得するにはどうすればよいですか? たとえば、次のメソッドを BaseClass に追加したとします。
def behavior2
puts 'base class behavior2'
end
ChildModule でオーバーライドします。ChildModule の動作から BaseModule の動作 2 を呼び出すことができますか?