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

object_ext.rb

   1  class Object
   2    def remove_singleton_method(*args)
   3      (class << self; self end).class_eval do
   4        args.each{|i| send :remove_method, i}
   5      end
   6    end
   7  end

こんな感じ。

posted by Png genki on Mon 23 Feb 2009 at 22:02

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

   1  object = new Object
   2  def object.foo; end
   3  object.singleton_methods #=> [:foo]
   4  (class << object; self end).class_eval{send :remove_method, :foo}
   5  object.singleton_methods #=> []

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

posted by Png genki on Mon 23 Feb 2009 at 21:53
Contents
Object#remove_singleton_method
Singleton Methodをundefする
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ