2011-12-21 56 views
0

我有以下的Ruby模塊:迭代哈希常量在Ruby中

module Test 
    Constant1 = { 
    :key1 => :value1, 
    :key2 => :value2  
    } 

    Constant2 = { 
    :key1 => :value1, 
    :key2 => :value2  
    } 
end 

,我試圖通過宣佈哈希迭代常量,打印用下面的代碼中定義的所有鍵:

Test.constants.each do |constant| 
    constant.keys.each do |key| 
    puts "key: #{key}" 
    end 
end 

但我得到NoMethodError: undefined method 'keys' for "Constant2":String,我不知道如何將String轉換成真正的costant。任何人都知道如何做到這一點?

回答

2

這個工作:您從模塊測試取

Test.constants.each do |constant| 
    Test.const_get(constant).keys.each do |key| 
    puts "key: #{key}" 
    end 
end 
+0

謝謝,這解決了我的問題。 – Pablo 2011-12-21 12:36:26

3

試試這個:

Test.constants.each do |c| 
    Test.const_get(c).each do |key, value| 
    puts "key: #{key}, value: #{value}" 
    end 
end 
+0

無論是'.keys.each'還是'.each do | key,value |'。 :-) – 2011-12-21 09:53:35

+0

@MichaelKohl你是對的,先生。我很着急:-) – 2011-12-21 09:54:21

+0

太好了,對不起,我只能選擇一個... +1 – Pablo 2011-12-21 12:37:08

0

的常量實際上[ 「CONSTANT1」, 「CONSTANT2」。 如果你真的想以這種方式使用它,你可以在模塊變量中存儲散列。

+0

嗯,事實是我真的沒有打算用這種方式:) – Pablo 2011-12-21 12:38:37