Ruby でクラスメソッドが定義された時に処理をフックする
Ruby でクラスメソッド、つまりクラスオブジェクトに対して特異メソッドが定義された時に処理をフックしたい場合は .singleton_method_added
メソッドを『クラスメソッド』として定義します。
[コード]
class X # インスタンスメソッドに singleton_method_added を追加する def self.singleton_method_added name p name end # インスタンスメソッドを定義しても呼び出されない def homu end # クラスメソッドを定義した場合に .singleton_method_added が呼び出される def self.mado end end x = X.new # インスタンスオブジェクトに対する特異メソッドを定義しても呼び出されない def x.mami end
[出力]
:singleton_method_added :mado
.singleton_method_added
の場合は、クラスメソッドとして定義した singleton_method_added
自身も呼び出されます。