В соответствии с документацией mod.const_get(sym)
"Возвращает значение именованной константы в модуле".
Я также знаю, что const_get
по умолчанию может искать цепочку наследования получателя. Итак, следующие работы:
class A; HELLO = :hello; end
class B < A; end
B.const_get(:HELLO) #=> :hello
Я также знаю, что классы в подклассе Ruby Object
, так что вы можете использовать const_get
для поиска глобальных констант, даже если приемник является нормальным классом:
class C; end
C.const_get(:Array) #=> Array
Однако, и здесь я запутался - модули не подклассы Object
. Итак, почему я могу по-прежнему искать "глобальные" константы из модуля с помощью const_get
? Почему выполняется следующее?
module M; end
M.const_get(:Array) #=> Array
Если документация верна - const_get
просто ищет константу, определенную под приемником или его суперклассами. Но в коде, приведенном выше, Object
не является суперклассом M
, так почему же можно искать Array
?
Спасибо