Ruby でメソッドが追加された時に別名で定義し直す
と、いうのを書いてみました。
[コード]
class X @@ignore = false def self.method_added name if @@ignore || name == :method_added @@ignore = false return end @@ignore = true alias_method "_#{name}", name remove_method name end def hoge :hoge end def foo :foo end end x = X.new x._hoge # => :hoge x._foo # => :foo
やってることは #method_added
メソッドを利用して、『メソッドが追加された時』に処理をフックして、別名で定義し直すようにしています。