Ruby で特異メソッドを定義した際に処理をフックする

Ruby で特異メソッドを定義した際に処理をフックする場合、『インスタンスメソッド』に #singleton_method_added を定義します。

[コード]

class X
    # インスタンスメソッドに singleton_method_added を追加する
    def singleton_method_added name
        p name
    end

    # インスタンスメソッドを定義しても呼び出されない
    def homu
        
    end
end

x = X.new

# 特異メソッドを定義したら #singleton_method_added が呼び出される
def x.mami
    
end

[出力]

:mami

インスタンスメソッド定義時に処理をフックする .method_added とは違い、クラスの『インスタンスメソッド』として定義する違いがあるので注意。