Я думаю, что Object - предок всех, включая Class. Поэтому я думаю, что это должен быть Class.class == Object. Я немного смущен и сбит с толку

5
fwoncn 2 Авг 2009 в 23:59

4 ответа

Лучший ответ

Class возвращает класс (#type), а не предка. Класс объектов - Class. Класс класса - это класс. Класс - это объект. Правда в рекламе: я никогда не изучал Ruby, но отношение объект-класс должно быть тем, которое Smalltalk установил 30 лет назад.

10
Remus Rusanu 2 Авг 2009 в 20:08

Вот как это работает в Ruby 1.9:

Class.class = Class

Class.superclass = Module
Module.class = class
Module.superclass = Object
Object.class = Class
Object.superclass = BasicObject
BasicObject.class = Class
BasicObject.superclass = nil
5
ennuikiller 2 Авг 2009 в 20:15

Класс Object - Class (поскольку Object сам является классом), а Object является предком Class.

Есть круговая ссылка, она довольно сложная. Моя личная рекомендация, если вам действительно не нужно с ней играть, не ходите туда.

6
Sinan Taifour 2 Авг 2009 в 20:15

Класс, Объект, Модуль и все другие классы являются экземплярами класса class :)

Class.class == Module.class == Object.class == Hash.class == Класс

Класс также является объектом (как и любой другой объект в системе), но это не прямой экземпляр объекта, это экземпляр производного класса (класс в этом дело)

Class.superclass.superclass == Object (с модулем посередине)

Сам объект тоже является классом. поэтому Object.class == Class

Класс, модуль и объект имеют циклическую зависимость, поскольку они лежат в основе объектно-ориентированной модели.

Object.class.superclass.superclass == Объект

=> parent (.superclass)
-> instance-of (.class)

альтернативный текст http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct

9
Vitaly Kushner 3 Авг 2009 в 02:48