Class 有超类 Module,它有超类 Object,它有超类 BasicObject,它是 Class 的一个实例。而 Class 又是 Module 的子类。
我对此感到非常困惑。(以上内容是通过对上述每个对象使用 .class 和 .superclass 方法收集的)
谁能向我解释这里到底发生了什么?
Class 有超类 Module,它有超类 Object,它有超类 BasicObject,它是 Class 的一个实例。而 Class 又是 Module 的子类。
我对此感到非常困惑。(以上内容是通过对上述每个对象使用 .class 和 .superclass 方法收集的)
谁能向我解释这里到底发生了什么?
短语“实例”是您需要在这里进行的心理体操的一小部分但很重要。
那,以及类型的对象Class
,以及一个名为 的类Object
。
如果你能理解这些,至少在慢慢地对自己重复的时候,那么你就明白了:
Object.new
创建类Object的实例
Object
是对Object类的引用,它本身就是Class 类的对象
Class
是类Class的引用,它也是类Class的对象(!)
Class.new
创建类Class的实例。
class Foo
Foo = Class.new( String )
与class Foo < String; end
Class
, Module
,的类层次结构Object
是 Ruby 中的一个实现细节。几乎所有的类都继承自Object
,所以这样做也不足为奇Class
。
剩下的只是重复使用和体验。
值得注意的是这里发生的其他事情:您键入的代码中的标签是符号/变量名称,它们是指向具有类型并包含数据的基础对象的指针。不需要直接使用这些标签,它们与任何其他 Ruby 变量几乎相同:
o_klass = Object
o_instance = o_klass.new
o_instance.class
=> Object