読者です 読者をやめる 読者になる 読者になる

Ruby でメソッドが追加された時に呼び出されるメソッドのまとめ

大まかに .singleton_method_added.method_added, #singleton_method_added の3つを使い分ければいい感じですかね。

[コード]

class X
    # クラスメソッドを定義した時に呼び出される
    def self.singleton_method_added name
        p "class method : #{name}"
    end

    # クラスのインスタンスメソッドを定義した時に呼び出される
    def self.method_added name
        p "instance method : #{name}"
    end

    # クラスインスタンスの特異メソッドを定義した時に呼び出される
    def singleton_method_added name
        p "singleton method : #{name}"
    end
end

x = X.new

# インスタンスオブジェクトに対する特異メソッドを定義しても呼び出されない
def x.mami
    
end

[出力]

"class method : singleton_method_added"
"class method : method_added"
"instance method : singleton_method_added"
"singleton method : mami"

定義するメソッドが『クラスメソッド』なのか『インスタンスメソッド』なのかは注意する必要がある。