Techioz Blog

インスタンスからのみメソッドを削除する

概要

単一インスタンスからメソッドを削除することはできますか?

class Foo
  def a_method
    "a method was invoked"
  end
end

f1 = Foo.new
puts f1.a_method # => a method was invoked

これで、クラスから a_method を削除し、すでに作成されたオブジェクトから a_method を削除できます。

class Foo
  remove_method(:a_method)
end

同じオブジェクトから a_method を呼び出した場合:

puts f1.a_method # => undefined method

別のオブジェクトを作成すると、次のようになります。

f2 = Foo.new
puts f2.a_method # => undefined method

特定の単一オブジェクトからメソッドのみを削除するにはどうすればよいですか?

解決策

はい、可能です:

f1.instance_eval('undef :a_method')