Ruby 对象可以有多个特征类吗?
Can a Ruby object have multiple eigenclasses?
特征类被添加到继承层次中。
如果添加了多个单例方法,这些方法是添加到同一个特征类中,还是不同的特征类都被注入到该对象的继承层次中?
例如
def foo.test
0
end
def foo.test2
0
end
这是否会添加 2 个特征类:一个使用 'test' 方法,另一个使用 'test2' 方法?还是一种特征类同时具有两种方法?
这些被添加到单个元class,因为对象总是只有一个单例class .
您可以查看:
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
他们去同一个单例class,这很容易验证你自己:
foo.singleton_class.instance_methods.grep(/test/)
#=> [:test, :test2]
特征类被添加到继承层次中。
如果添加了多个单例方法,这些方法是添加到同一个特征类中,还是不同的特征类都被注入到该对象的继承层次中?
例如
def foo.test
0
end
def foo.test2
0
end
这是否会添加 2 个特征类:一个使用 'test' 方法,另一个使用 'test2' 方法?还是一种特征类同时具有两种方法?
这些被添加到单个元class,因为对象总是只有一个单例class .
您可以查看:
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
他们去同一个单例class,这很容易验证你自己:
foo.singleton_class.instance_methods.grep(/test/)
#=> [:test, :test2]