Почему 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
)