Вместо того, чтобы копировать все вещи из хеша, вы можете просто добавить некоторое поведение в Hash для поиска.
Если вы добавите это определение, вы расширите Hash для обработки всех неизвестных методов как поиска хеша:
class Hash
def method_missing(n)
self[n.to_s]
end
end
Имейте в виду, что это означает, что вы никогда не увидите ошибок, если вызовете неправильный метод для хэша - вы просто получите то, что вернет соответствующий поиск в хэше.
Вы можете значительно уменьшить проблемы отладки, которые это может вызвать, только помещая метод в определенный хеш - или столько хешей, сколько вам нужно:
a={'foo'=>5, 'goo'=>6}
def a.method_missing(n)
self[n.to_s]
end
Другое наблюдение состоит в том, что когда система вызывает method_missing
, она дает вам аргумент Symbol
. Мой код преобразовал его в String
. Если ваши хеш-ключи не являются строками, этот код никогда не вернет эти значения - если вы вводите символы вместо строк, просто замените n
на n.to_s
выше.