从那篇博文中,您可以构建一个类似的图表:
+------------------+ +-------------------+
| Object |- eigenclass ->| Object eigenclass |
+------------------+ +-------------------+
^ ^
| superclass superclass |
+------------------+ +-------------------+
| A |- eigenclass ->| A eigenclass |
+------------------+ +-------------------+
^
| superclass
+-------+ +------------------+
| A.new |- eigenclass ->| A.new.eigenclass |
+-------+ +------------------+
试图找到 A 实例的特征类的超类表明它指向A
该类。
A.new.eigenclass.superclass # => A
Class.new
返回一个Class对象的实例,即一个新的类。这是一堂课,就像A
上课一样。
Class.new.class # => Class
A.class # => Class
A 的超类和 Class.new 的超类都是隐式的Object
。
Class.new.superclass # => Object
A.superclass # => Object
因为 A 的超类是Object
,所以 A 的 eigenclass 的超类是 Object 的 eigenclass。
Object.eigenclass # => #<Class:Object>
A.eigenclass.superclass # => #<Class:Object>
A.eigenclass.superclass == Object.eigenclass # => true
类似地,找到 的 eigenclass 的超类Class.new
产生 Object 的 eigenclass
Class.new.eigenclass.superclass # => #<Class:Object>
Class.new
和之间的区别在于A.new
它Class.new
本身是一个类,因此可以构造新对象,而A.new
不能。
Class.new.new # => #<#<Class:0x007f86b50d8f70>:0x007f86b50d8f20>
A.new.new # => NoMethodError: undefined method `new' for #<A:0x007f86b50cbf50>