我試圖讓馬茨和弗拉納根的「Ruby編程語言」元編程章到我的頭上,但是我不明白,從下面的代碼片段輸出,我想出了:如何通過反射獲取由Ruby的Module類定義的常量?
p Module.constants.length # => 88
$snapshot1 = Module.constants
class A
NAME=:abc
$snapshot2 = Module.constants
p $snapshot2.length # => 90
p $snapshot2 - $snapshot1 # => ["A", "NAME"]
end
p Module.constants.length # => 89
p Module.constants - $snapshot1 # => ["A"]
p A.constants # => ["NAME"]
書中指出,類方法constants
將返回該類的常量列表(如在A.constants
的輸出中所見)。 我試圖獲得爲Module類定義的常量列表,當我遇到上述奇怪的行爲。
A
的常量顯示在Module.constants中。如何獲取Module類定義的常量列表?
的docs狀態
Module.constants
返回系統中定義的所有常量。包括所有類的名稱和方法
由於A
繼承Module.constants
它的實現,它是如何表現不同的基類和派生類型?
p A.class # => Class
p A.class.ancestors # => [Class, Module, Object, Kernel]
注:如果您使用Ruby 1.9的,constants
將返回符號,而不是字符串數組。
我回答了你的問題嗎?我問,因爲我的答案不是'接受',但沒有要求任何額外的信息... – 2010-02-26 20:53:50
@Marc - 你的答案讓我回到更多的問題和更多的塗鴉和擦除。本週花費在試圖圍繞方法解決方案包圍我的頭......我仍然不清楚可能性是什麼 - 但是我認爲我對於它的工作原理有90%的把握。看到我的帖子下面。 – Gishu 2010-03-02 12:54:49