Я думаю, что Объект - предки всех, включая класс. Так что я думаю, что это должен быть Class.class == Object. Я чувствую себя немного запутанным и искаженнымПочему Object.class == Класс в Ruby?
ответ
класс возвращает класс (#type) не предок. Класс объектов - класс. Класс класса - класс. Класс - это объект. Правда в рекламе: я никогда не узнавал Ruby, но отношение Object-Class имеет, чтобы быть одним 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
Object
«s класс Class
(так как Object
сам класс), и Object
является предком Class
.
Существует круговая ссылка, она довольно сложная. Моя личная рекомендация, если вам действительно не нужно играть с ней, не ходите туда.
класса, объект, модуль и все другие классы экземпляры из класса класса :)
Class.class == Module.class == Object.class == == Hash.class класса
класс также является объектом (как и любой другой объект в системе), но это не прямой экземпляр объекта, он является экземпляром производном класс (класс в данном случае)
Class.superclass.superclass == Объект (с модулем посередине)
Сам объект также является классом. поэтому Object.class == Класс
Класс, модуль и объект имеют круговую зависимость, поскольку они находятся в ядре модели OO.
Object.class.superclass.superclass == Объект
=> parent (.superclass)
-> instance-of (.class)
alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct
Круговая зависимость работает, потому что это все встроенные классы. Они являются частью основной среды Ruby и настроены таким образом при запуске и не добавляются так, как вы обычно добавляете класс. Среда исполнения имеет право настраивать указатели, но она хочет, и дизайнер решил сделать это таким образом. –
- 1. object.class возвращает неожиданные результаты в Ruby
- 2. Почему Class.getSuperclass() иногда возвращает Object.class?
- 3. Почему reflections.getSubTypesOf (Object.class) не находит перечисления?
- 4. В Java, что делает object.class?
- 5. Java Object.class и x.getClass
- 6. Object.class/object.getClass() (в чем разница)
- 7. MapStruct: Object.class to Custom.class mapping
- 8. Шаблон стратегии: экземпляр или Object.class?
- 9. Как класс Object в ruby будет экземпляром его подкласса, класс «Класс»
- 10. любой (Object.class) бросали в нуль Mockito
- 11. Почему у stdlib Ruby есть класс DateTime?
- 12. Класс и класс Ruby
- 13. Как создать Object.class Type Generic
- 14. Почему ArrayList.contains (Object.class) не работает для поиска типов экземпляров?
- 15. Класс карты в Ruby
- 16. класс methosd (ruby)
- 17. Почему мой класс ruby не превращается в json?
- 18. В Ruby, почему мой базовый класс только один раз ставится?
- 19. Почему вы хотите создать пустой класс в ruby?
- 20. Почему каждый класс в Ruby наследуется от Object?
- 21. Почему я получаю «Тест не класс» в этом Ruby-скрипте?
- 22. Является ли (тип) String.class подтипом (тип) Object.class?
- 23. Класс словаря в Ruby Hash
- 24. TypeUtils говорит, что «null» является экземпляром «Object.class»?
- 25. Класс Ruby для символа
- 26. Как изменить класс Ruby?
- 27. Ruby rspec Издевательский класс
- 28. Ruby Temperature House класс
- 29. Выходной класс Ruby
- 30. Ruby: класс, расширяющий модуль
Метаклассы работают по-разному в Ruby: они получают вводили в метод цепочки поиска, таким образом, Рубин не имеет две параллельные иерархии классов и метаклассов, но, как вы говорите, основы идентичны. –
@Jorg: спасибо. Как только я закончу свой нынешний проект, я поднимусь на рельсы и рубин, я слышу столько похвал, что я заинтригован :) –
Спасибо. Я думаю, что сейчас я понимаю отношения. @ Jörg_W_Mittag также помогает. То есть классы и метаклассы - это два разных, но связанных понятия. – fwoncn