4

簡単な例です。

class Base
  def self.inherited(child)
    p 'Base.inherited'
  end
end

class User < Base
  p 'User'
end

これが私を生み出す

"Base.inherited"
"User"

inheritedこれは問題なく動作しますが、Base クラスのフックにパッチを適用するにはどうすればよいですか?

私の結果が欲しいとしましょう

"Base.inherited"
"Something inherited"
"User"

そして、まだ User クラスに Base を継承させています。

アイデア、回避策はありますか?

ありがとう!


質問をより具体的に更新します。

クラス User が User クラスを変更せずに Base を継承するときに、正確にいくつかのコードを実行する必要があります。

inherited定義されたメソッドを持つ Base クラスがあるとしましょう。一方では、他のどのクラスが Base を継承するのかわかりません。inherited一方、Base クラスの元のメソッドを変更することはできません。

では、どうすればそのメソッドにパッチを当てることができますか?

ありがとう!

4

2 に答える 2

4
module Foo
  def self.included(child)
    p "Something inherited"
  end
end

class Base
  def self.inherited(child)
    p 'Base.inherited'
  end
end

class User < Base
    include Foo
    p 'User'
end

# >> "Base.inherited"
# >> "Something inherited"
# >> "User"
于 2013-06-19T20:19:35.653 に答える