2011-12-21 75 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