Ruby对象可以有多个特征类吗?

时间:2017-02-01 09:33:48

标签: ruby eigenclass

将特征类添加到继承层次结构中。

如果添加了多个单例方法,是将它们添加到相同的本征类,还是将不同的本征类都注入到该对象的继承层次结构中?

例如

def foo.test
  0
end
def foo.test2
  0
end

这会增加2个特征类:一个是'test'方法,另一个是'test2'方法?或两个方法的一个本征类?

2 个答案:

答案 0 :(得分:3)

这些被添加到单个元类中,因为 对象始终只有一个单例类

您可以查看:

foo.singleton_methods
#=> [:test, :test2]
foo.method(:test)
#=> #<Method: #<Object:0x007ff9b4d48388>.test>
foo.method(:test2)
#=> #<Method: #<Object:0x007ff9b4d48388>.test2>

或使用Method#owner

foo.method(:test).owner == foo.method(:test2).owner
#=> true

答案 1 :(得分:1)

他们去同一个单身课程,这很容易验证自己:

foo.singleton_class.instance_methods.grep(/test/)
#=> [:test, :test2]