Объединение многомерных хэшей в Ruby

У меня есть два хэша, структура которых примерно такая:

hash_a = { :a => { :b => { :c => "d" } } }
hash_b = { :a => { :b => { :x => "y" } } }

Я хочу объединить их вместе, чтобы получить следующий хэш:

{ :a => { :b => { :c => "d", :x => "y" } } }

Функция слияния заменит значение: a в первом хэше на значение: a во втором хеш-коде. Итак, я написал свою собственную рекурсивную функцию слияния, которая выглядит следующим образом:

def recursive_merge( merge_from, merge_to )
    merged_hash = merge_to
    first_key = merge_from.keys[0]
    if merge_to.has_key?(first_key)
        merged_hash[first_key] = recursive_merge( merge_from[first_key], merge_to[first_key] )
    else
        merged_hash[first_key] = merge_from[first_key]
    end
    merged_hash
end

Но я получаю сообщение об ошибке выполнения: не может добавить новый ключ в хэш во время итерации . Как лучше всего объединить эти хэши в Ruby?

6
задан White Elephant 7 April 2011 в 12:49
поделиться