Используйте ваш код, что нормально, но используйте фигурные скобки для блочных и более коротких блочных переменных. И вам не нужен второй presence
main_hash.merge!(option_hash){|_k, h1, h2| h1.presence || h2}
#merge!
(и #merge
) с блоком только вызывает блок для обработки случаев, когда ключ присутствует в обоих хешах. Там, где option_hash
ключи отсутствуют в main_hash
, пара ключ / значение просто вставляется.
Вы можете использовать #merge!
с блоком, чтобы сделать несколько хитрых трюков, например, настроить общую сумму хеш-значений.
hash_1 = {a: 1, b: 1, c: 1}
hash_2 = {b: 1, c: 1, d: 1}
hash_1.merge!(hash_2{|_k, v1, v2| v1 + v2}
=> {:a => 1, :b => 2, :c => 2, :d => 1}