Каково поведение ruby ​​Hash # merge при использовании с блоком - PullRequest
8 голосов
/ 06 марта 2010

Кажется, это не очень хорошо задокументировано:

hsh.merge(other_hash){|key, oldval, newval| block} → a_hash

http://ruby -doc.org / core / classes / Hash.html # M002880

1 Ответ

10 голосов
/ 06 марта 2010

Как и следовало ожидать, результирующий хеш будет содержать значение, возвращаемое блоком для каждого ключа, который существует в обоих объединяемых хешах:

>> h1 = {:a => 3, :b => 5, :c => 6}
=> {:a=>3, :b=>5, :c=>6}
>> h2 = {:a => 4, :b => 7, :d => 8}
=> {:a=>4, :b=>7, :d=>8}
>> h1.merge h2
=> {:a=>4, :b=>7, :c=>6, :d=>8}
>> h1.merge(h2){|k,v1,v2| v1}
=> {:a=>3, :b=>5, :c=>6, :d=>8}
>> h1.merge(h2){|k,v1,v2| v1+v2}
=> {:a=>7, :b=>12, :c=>6, :d=>8}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...