迭代Ruby中的哈希常量

时间:2011-12-21 09:47:07

标签: ruby hashmap constants

我有以下Ruby模块:

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

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

我正在尝试遍历声明的Hash常量来打印使用以下代码定义的所有键:

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

但是我得到NoMethodError: undefined method 'keys' for "Constant2":String并且我不知道如何将String转换为真实的成本。谁知道怎么做?

3 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:2)

这有效:

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

答案 2 :(得分:0)

从模块Test获取的常量实际上是[“Constant1”,“Constant2”]。 如果你真的想以这种方式使用哈希,你可以在模块变量中存储哈希值。