在 Ruby 中,获取类的 eigenclassFoo
很简单
eigenclass = class << Foo; self; end
#=> #<Class:Foo>
eigenclass = Foo.singleton_class #2.1.0
#=> #<Class:Foo>
我对逆运算感兴趣:从 eigenclass 本身获取 eigenclass 的所有者:
klass = eigenclass.owner
#=> Foo
我不确定这是否可能,因为 eigenclass 是 的匿名子类Class
,因此Foo
在其继承层次结构中没有出现。检查 eigenclass 的方法列表也不令人鼓舞。eigenclass.name
返回nil
。唯一让我希望这是可能的:
Class.new # normal anon class
#=> #<Class:0x007fbdc499a050>
Foo.singleton_class
#=> #<Class:Foo>
显然,本征类的to_s
方法对所有者有所了解,即使在本征类被实例化时该信息是硬编码的。因此,我知道的唯一方法是一些 hacky 之Object.const_getting
类的
Object.const_get eigenclass.to_s[/^#\<Class\:(?<owner>.+)\>$/, :owner]
#=> Foo