根据文档mod.const_get(sym)
"返回mod中命名常量的值".
我也知道const_get
默认情况下可以查找接收器的继承链.以下是有效的:
class A; HELLO = :hello; end
class B < A; end
B.const_get(:HELLO) #=> :hello
Run Code Online (Sandbox Code Playgroud)
我也知道Ruby子类中的类Object
,因此const_get
即使接收器是普通类,您也可以使用查找"全局"常量:
class C; end
C.const_get(:Array) #=> Array
Run Code Online (Sandbox Code Playgroud)
然而,这是我困惑的地方 - 模块不是子类Object
.那么为什么我仍然可以使用模块查找"全局"常量const_get
?为什么以下工作?
module M; end
M.const_get(:Array) #=> Array
Run Code Online (Sandbox Code Playgroud)
如果文档是正确的 - const_get
只需查找接收器或其超类下定义的常量.但是在上面的代码中,Object
不是超类M
,为什么有可能查找Array
?
谢谢
ruby ×1