Ruby中首先出现的是什么';s对象模型?

Ruby中首先出现的是什么';s对象模型?,ruby,Ruby,我一直在读元编程Ruby,对象模型就像是鸡还是蛋的两难选择 在Ruby 1.8中,对象类是类的实例。模块的超类是对象,是类的实例。类的超类是Module,它是类的实例(自引用)。比如说上课;终点在某处被定义;SomeClass是类的实例,但其超类是Object。为什么类的实例将Object作为超类而不是nil 同样,若对象要存在,那个么类必须存在,但模块必须存在,但模块要存在,对象必须存在。这些类是如何创建的? 下面是一个完整的Ruby类图(适用于Ruby 1.8): 为了帮助您理解类图奇怪的

我一直在读元编程Ruby,对象模型就像是鸡还是蛋的两难选择

在Ruby 1.8中,对象类是类的实例。模块的超类是对象,是类的实例。类的超类是Module,它是类的实例(自引用)。比如说上课;终点在某处被定义;SomeClass是类的实例,但其超类是Object。为什么类的实例将Object作为超类而不是nil

同样,若对象要存在,那个么类必须存在,但模块必须存在,但模块要存在,对象必须存在。这些类是如何创建的?


  • 下面是一个完整的Ruby类图(适用于Ruby 1.8):

    为了帮助您理解类图奇怪的、看似不可能的自反射性质,了解类指针和超类指针可以在C API中随时赋值是很有用的。也就是说,您可以创建一个对象(在C API中),并在创建之后决定类和超类指针指向什么

    另外,要理解定义的顺序,请查看
    Object.c
    中的
    Init_Object()
    (Ruby 1.9中)


    其中,
    rb\u cBasicObject
    在Ruby中是
    basicbject
    rb\u cObject
    在Ruby中是
    Object
    ,依此类推。

    您可以在Ruby黑客指南中找到更多细节:


    特别是第04章:引导

    好的,那么首先创建对象(在1.8中),然后修改对象,这样对象#类就是类?
    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);
    
    metaclass = rb_make_metaclass(rb_cBasicObject, rb_cClass);
    metaclass = rb_make_metaclass(rb_cObject, metaclass);
    metaclass = rb_make_metaclass(rb_cModule, metaclass);
    metaclass = rb_make_metaclass(rb_cClass, metaclass);
    boot_defmetametaclass(rb_cModule, metaclass);
    boot_defmetametaclass(rb_cObject, metaclass);
    boot_defmetametaclass(rb_cBasicObject, metaclass);