Issue #15111 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to mame (Yusuke Endoh)

As I recall, Matz has accepted this ticket at the day of developers' meeting.  I'll commit it soon.

----------------------------------------
Feature #15111: Make the number of arguments of `Hash#merge` variable
https://bugs.ruby-lang.org/issues/15111#change-74093

* Author: liwii (Koki Ryu)
* Status: Assigned
* Priority: Normal
* Assignee: mame (Yusuke Endoh)
* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>