Вот полная диаграмма классов Ruby (для Ruby 1.8): http://banisterfiend.wordpress.com/2008/11/25/a-complete-ruby-class-diagram/
Чтобы помочь вам понять странную, казалось бы, невозможную саморефлексивную природу диаграммы классов, полезно знать, что указатели класса и указатели суперкласса могут быть назначены в любое время в C API. То есть вы можете создать объект (в C API) и после этого решить, на что указывают указатели классов и классов.
Кроме того, чтобы понять порядок определения, посмотрите на Init_Object()
в object.c
(в Ruby 1.9)
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);
Где rb_cBasicObject
- это BasicObject
в Ruby, rb_cObject
- это Object
в Ruby и т. Д.