Singleton Methodを削除する方法
についてですが、
Objectクラスに用意されているとありがたいですね。

object_ext.rb

ruby>>
class Object
def remove_singleton_method(*args)
(class << self; self end).class_eval do
args.each{|i| send :remove_method, i}
end
end
end
<<--

こんな感じ。

posted by genki genki on Mon 23 Feb 2009 at 21:55 with 0 comments

方法を探していたのですが、意外と苦戦したのでメモ。

ruby>>
object = new Object
def object.foo; end
object.singleton_methods #=> [:foo]
(class << object; self end).class_eval{send :remove_method, :foo}
object.singleton_methods #=> []
<<--

これで行けるようです。instance_eval{undef foo}でも削除はできますが、その場合親クラスのメソッドにもアクセス出来なくなってしまうので、
singleton methodだけを削除する場合には、
メタクラスのインスタンスメソッドをremove_methodするのが良いようです。

posted by genki genki on Mon 23 Feb 2009 at 21:25 with 0 comments