相关疑难解决方法(0)

在Ruby中混淆const_get的行为?

根据文档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

20
推荐指数
1
解决办法
9526
查看次数

标签 统计

ruby ×1