0

私が達成したいのは、以下のようなものです。つまり、拡張モジュール メソッドから基本クラス メソッドを呼び出します。

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 を呼び出すことができますか?

4

1 に答える 1

1

正しい構文は次のとおりだと思います。

module ChildModule
  def behavior
   super
   puts 'child module behavior'
  end
end
于 2012-07-31T09:22:19.407 に答える