kronoz - в этом случае (перегрузки для обоих) это имело бы значение? Если у Вас будет две перегрузки, которые взяли различные типы, то Вы будете по существу говорить, что любой может быть передан и сделать то же самое.
у Вас не должно быть двух перегрузок, которые делают совершенно другие действия в зависимости от типов передали.
, В то время как Вы могли бы получить некоторый беспорядок в том экземпляре, это все еще будет совершенно безопасно с точки зрения типов, у Вас просто был бы кто-то называющий неправильный метод.
class возвращает класс (#type), а не предка. Класс объектов - Class. Класс класса - это класс. Класс - это объект. Правда в рекламе: я никогда не изучал Ruby, но отношение объект-класс должно быть тем, которое Smalltalk установил 30 лет назад.
Вот как это работает в 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
Класс объекта
- Класс
(поскольку Объект
сам по себе является классом), а Объект
является предком класса
.
Есть круговая ссылка, это довольно сложно. Моя личная рекомендация, если вам действительно не нужно с ней играть, не ходите туда.
Класс, Объект, Модуль и все другие классы являются экземплярами класса Классом :)
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