在Ruby中创建一个没有实例方法的类

时间:2016-12-27 00:59:18

标签: ruby

如何创建没有定义实例方法的类?甚至不是__send____id__

1 个答案:

答案 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