Class
имеет суперкласс Module
, но любой класс, например String
, имеет суперкласс Object
. Почему это?
Суперкласс класса и суперкласс String
- Это неправда.
Integer
имеет суперклассNumeric
. 12.10.2015 Module
– этоObject
, что делаетClass
такжеObject
. 12.10.2015
Ответы:
Чтобы понять это, вам нужно проверить Объектная модель em> Руби:
Классы, модули и объекты взаимосвязаны. На следующей диаграмме вертикальные стрелки представляют наследование, а скобки — метаклассы. Все метаклассы являются экземплярами класса Class
.
+---------+ +-...
| | |
BasicObject-----|-->(BasicObject)-------|-...
^ | ^ |
| | | |
Object---------|----->(Object)---------|-...
^ | ^ |
| | | |
+-------+ | +--------+ |
| | | | | |
| Module-|---------|--->(Module)-|-...
| ^ | | ^ |
| | | | | |
| Class-|---------|---->(Class)-|-...
| ^ | | ^ |
| +---+ | +----+
| |
obj--->OtherClass---------->(OtherClass)-----------...
На все ваши вопросы можно ответить, посмотрев на диаграмму выше.
но любой класс, например "String", вы получаете суперкласс "Object". Почему это?
Посмотрите на OtherClass
на схеме. Hash
, String
, Array
и т. д. все OtherClass
.
в Ruby сам "Класс" имеет надкласс "Модуль"
Вот как это устроено, опять же можно ответить по схеме.
В ruby все является объектом, включая класс, в то время как сами классы также являются объектами. Объект String
имеет собственный класс с именем Class
. String
сам по себе также является классом, а суперклассом String является «Object».
Между тем, Class
сам по себе тоже является объектом, однако надклассом является Module
, который разработан языком Ruby.
this
. 07.10.2015