Почему Object.class == Класс в Ruby? - PullRequest
5 голосов
/ 02 августа 2009

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

Ответы [ 4 ]

10 голосов
/ 03 августа 2009

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

9 голосов
/ 03 августа 2009

Class, Object, Module и все другие классы являются экземплярами класса Class:)

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

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

Class.superclass.superclass == Объект (с модулем в середине)

Сам объект также является классом. так Object.class == Класс

Класс, Модуль и Объект имеют круговую зависимость, поскольку находятся в ядре модели ОО.

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

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

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

6 голосов
/ 03 августа 2009
Класс

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

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

5 голосов
/ 03 августа 2009

Так работает в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...