3

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

如果添加了多个单例方法,这些方法是添加到同一个特征类中,还是注入到该对象的继承层次结构中的不同特征类中?

例如

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

这会添加 2 个特征类:一个带有“test”方法,另一个带有“test2”方法?还是一个具有两种方法的特征类?

4

2 回答 2

3

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

你可以检查它:

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

或使用方法#owner

foo.method(:test).owner == foo.method(:test2).owner
#=> true
于 2017-02-01T09:34:47.743 回答
1

他们去同一个单例类,这很容易验证自己:

foo.singleton_class.instance_methods.grep(/test/)
#=> [:test, :test2]
于 2017-02-01T09:36:17.050 回答