在表面上,这是有道理的:
(Class.is_a? Object) && (Object.is_a? Class)
评估为true
。
但是,它似乎引入了循环依赖:Class
是Object
的子类,这意味着必须在Object
定义之前定义Class
。但是,Object
是Class
的实例,这意味着必须先定义Class
才能定义Object
。
这怎么可能?
这可能与询问 Class
如何Class
的实例有点相关:
(Class.instance_of? Class)
返回true
。
答案 0 :(得分:2)
以下是在Ruby MRI中实现的答案:
Init_class_hierarchy(void)
{
rb_cBasicObject = boot_defclass("BasicObject", 0);
rb_cObject = boot_defclass("Object", rb_cBasicObject);
rb_cModule = boot_defclass("Module", rb_cObject);
rb_cClass = boot_defclass("Class", rb_cModule);
rb_const_set(rb_cObject, rb_intern_const("BasicObject"), rb_cBasicObject);
RBASIC_SET_CLASS(rb_cClass, rb_cClass);
RBASIC_SET_CLASS(rb_cModule, rb_cClass);
RBASIC_SET_CLASS(rb_cObject, rb_cClass);
RBASIC_SET_CLASS(rb_cBasicObject, rb_cClass);
}
Object
首先使用BasicObject
作为boot_defclass
的后代创建。稍后,它使用Class
将其类设置为RBASIC_SET_CLASS
。
您的推理中的漏洞就在这里:“Object
是Class
的一个实例,这意味着必须先定义Class
才能定义Object
。 “在创建Object
之后,没有什么能阻止你将Class
的类设置为else
{
console.log("Enjoy!")
}
。