Почему Object.class == класс в Ruby?

kronoz - в этом случае (перегрузки для обоих) это имело бы значение? Если у Вас будет две перегрузки, которые взяли различные типы, то Вы будете по существу говорить, что любой может быть передан и сделать то же самое.

у Вас не должно быть двух перегрузок, которые делают совершенно другие действия в зависимости от типов передали.

, В то время как Вы могли бы получить некоторый беспорядок в том экземпляре, это все еще будет совершенно безопасно с точки зрения типов, у Вас просто был бы кто-то называющий неправильный метод.

5
задан fwoncn 2 August 2009 в 19:59
поделиться

4 ответа

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

10
ответ дан 18 December 2019 в 05:44
поделиться

Вот как это работает в 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
ответ дан 18 December 2019 в 05:44
поделиться

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

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

6
ответ дан 18 December 2019 в 05:44
поделиться

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

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

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

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

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

Class, Модуль и объект имеют круговую зависимость, поскольку они составляют ядро ​​объектно-ориентированной модели.

Object.class.superclass.superclass == Object

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

alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28. png? direct

9
ответ дан 18 December 2019 в 05:44
поделиться