From: liukoki@... Date: 2018-09-13T10:56:12+00:00 Subject: [ruby-core:88993] [Ruby trunk Feature#15111] Make the number of arguments of `Hash#merge` variable Issue #15111 has been updated by liwii (Koki Ryu). If no argument is given to `Hash#merge`, the receiver itself is returned. In this way, `Hash` instance can revieve `Array` as arguments without concerning if the `Array` is empty. ```ruby hash1 = {a: 1, b: 2} hashes = return_array_of_hashes hash1.merge(*hashes) #=> It can't raise error even if `hashes` is empty. ``` ---------------------------------------- Feature #15111: Make the number of arguments of `Hash#merge` variable https://bugs.ruby-lang.org/issues/15111#change-74022 * Author: liwii (Koki Ryu) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- # Abstract Make the number of arguments of `Hash#merge` variable. # Background In many websites such as Stack Overflow and Qiita, many people are seeking how to merge more than three hashes. https://stackoverflow.com/questions/19548496/how-to-merge-multiple-hashes-in-ruby https://qiita.com/hc0208/items/c662f5189fa383872f4e https://stackoverrun.com/ja/q/4997431 Many ways, like using `Enumerable#inject` or calling `Hash#merge` multiple times, are proposed, but both don't seem intuitive. Especially when using block in `Hash#merge`, the code becomes too complicated. # Proposal Change the argument of `Hash#merge` from singular to variable length. # Implementation https://github.com/ruby/ruby/pull/1951 # Evaluation The code to merge more than three hashes became much simpler and more intuitive. before ```ruby hash1.merge(hash2).merge(hash3) [hash1, hash2, hash3].inject do |result, part| result.merge(part) { |key, value1, value2| key + value1 + value2 } end ``` after ```ruby hash1.merge(hash2, hash3) hash1.merge(hash2, hash3) { |key, value1, value2| key + value1 + value2 } ``` # Discussion # Summary The change is needed to make `Hash#merge` more useful and intuitive. -- https://bugs.ruby-lang.org/ Unsubscribe: