From: mame@...
Date: 2018-09-19T01:45:11+00:00
Subject: [ruby-core:89075] [Ruby trunk Feature#15111][Assigned] Make the number of arguments of `Hash#merge` variable

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>