According to the documentation mod.const_get(sym)
"Returns the value of the named constant in mod."
I also know that const_get
by default may look up the inheritance chain of the receiver. So the following works:
class A; HELLO = :hello; end
class B < A; end
B.const_get(:HELLO) #=> :hello
I also know that classes in Ruby subclass Object
, so that you can use const_get
to look up 'global' constants even though the receiver is a normal class:
class C; end
C.const_get(:Array) #=> Array
However, and this is where i'm confused -- modules do not subclass Object
. So why can I still look up 'global' constants from a module using const_get
? Why does the following work?
module M; end
M.const_get(:Array) #=> Array
If the documentation is correct - const_get
simply looks up the constant defined under the receiver or its superclasses. But in the code immediately above, Object
is not a superclass of M
, so why is it possible to look up Array
?
Thanks