Ruby の #method_added と #singleton_method_added の違い
両方ともクラスやモジュールにメソッドが定義された時に呼ばれるメソッドですが、
#method_added
は『メソッドの定義』、#singleton_method_added
は『特異メソッドの定義』という違いがあります。
[コード]
class X # #method_added はクラスメソッドとして定義する必要がある def self.method_added name puts "== method_added ==" puts name end # #singleton_method_added はメソッド定義 def singleton_method_added name puts "== singleton_method_added ==" puts name end def method end end x = X.new def x.singleton_method end
[出力]
== method_added == singleton_method_added == method_added == method == singleton_method_added == singleton_method
#method_added
はクラスメソッドとして定義する必要があることに注意。