Итерация хеш-констант в Ruby - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть следующий модуль 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 в реальную стоимость. Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2011

Попробуйте это:

Test.constants.each do |c|
  Test.const_get(c).each do |key, value|
    puts "key: #{key}, value: #{value}"
  end
end
2 голосов
/ 21 декабря 2011

Это работает:

Test.constants.each do |constant|
  Test.const_get(constant).keys.each do |key|
    puts "key: #{key}"
  end
end
0 голосов
/ 21 декабря 2011

Константы, которые вы выбираете из модуля Test, на самом деле ["Constant1", "Constant2"].Вы можете хранить хэши в переменных модуля, если вы действительно хотите использовать это таким образом.

...