概要
Module#method_added(name) -> ()
詳細
メソッド name が追加された時にインタプリタがこのメソッドを呼び出します。
このメソッドをオーバーライドすることで、メソッド追加時に任意の処理を実行できる。
サンプルコード
class Hoge def self.method_added(name) return if name.to_s.start_with?('new_') puts "start method_added => #{name}" alias_method :"new_#{name}", name puts "\tcreate alias new_#{name} for #{name}" puts "end method_added => #{name}" end %w{hoge hige hage}.each do |m| define_method m.to_sym do puts m end end end hoge = Hoge.new %w{hoge hige hage}.each do |m| hoge.send(m.to_sym) hoge.send(:"new_#{m}") end
出力
$ ruby method_added.rb start method_added => hoge create alias new_hoge for hoge end method_added => hoge start method_added => hige create alias new_hige for hige end method_added => hige start method_added => hage create alias new_hage for hage end method_added => hage hoge hoge hige hige hage hage