如何创建没有定义实例方法的类?甚至不是__send__
或__id__
。
答案 0 :(得分:5)
您可以使用Module#undef_method
取消定义方法:
class Foo < BasicObject
instance_methods.each { |method| undef_method(method) }
end
Foo.instance_methods #=> []
foo = Foo.new
foo.__id__ #=> NoMethodError: undefined method `__id__' for #<Foo:0x007fb9da565dd8>
foo.__send__(:test) #=> NoMethodError: undefined method `__send__' for #<Foo:0x007fb9da565dd8>
在此示例中,Foo
继承自BasicObject
,因为此类本身定义的实例方法非常少,因此,取消定义它们会更快。这不是强制性的,也就是说,你可以从任何类中取消定义实例方法,无论它继承什么,所以它可以很好地写成:
class Foo
instance_methods.each { |method| undef_method(method) }
end