根據文檔mod.const_get(sym)
「返回mod中命名常量的值」。在Ruby中混淆const_get的行爲?
我也知道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
?
感謝
請注意,這與'::'的行爲不匹配。 'SomeModule :: SomeGlobalConstant'會導致錯誤,而'SomeModule。const_get(:SomeGlobalConstant)'會工作。 – sepp2k 2010-07-02 12:16:52