Почему Ruby символизирует мои хэш-ключи?

Я столкнулся с чем-то странным, когда писал модуль Ruby (набор вспомогательных методов для приложения Sinatra). Я объявляю хеш как константу, а ключи - как строки. Позже, когда я пытаюсь получить значение, я получаю ноль. При проверке хеша я обнаружил, что ключи были преобразованы в символы. В чем дело?

Вот упрощенный пример:

module HelperModule

  RANGES = {
    'a' => 1...60,
    'b' => 60...90,
    'c' => 90..999
  }.freeze

  def find_range(key)
    RANGES[key] # Returns nil when key is 'a', 'b' or 'c'
  end

end

Изучение RANGES дает: {:a=>[1...60], :b=>[60...90], :c=>[90..999]},

Я могу обойти это достаточно легко, преобразовав ключ .to_sym, но я хочу понять, что здесь происходит.

1 ответ

Решение

Это что-то в вашей среде, которая меняет Hash,

Начните с изучения RANGES.class.ancestorsтакже ищите уточнения (те, которые вы, вероятно, должны найти using)

Другие вопросы по тегам