[ruby-dev:39939] [Feature #2540] Hash#contribute

From: Makoto Cyross <redmine@...>
Date: 2009-12-31 05:55:50 UTC
List: ruby-dev #39939
チケット #2540 が更新されました。 (by Makoto Cyross)


> > そこで、Hashにキーと値を設定する追加のメソッドとして、Hash#contributeを提案いたします。
> > 機能は、selfを返す以外はHash#storeと同等です。
> 
> 新しいメソッドを追加しなくてもtapを使えば良いと思います。
> 
> > これを使うときは、injectを使って、1行で済むようになります。
> 
> injectとの組み合わせならeach_with_objectを使う方が良いと思います。

ご意見を反映してみました。

# base:マージするハッシュ
# hash:マージ対象ハッシュ
def merge2(base, hash = {})
  base.each_with_object(hash){|pair, r| r.tap{|tmp| tmp[pair[0]] = pair[1].kind_of?(Hash) ? merge2(pair[1], r[pair[0]].nil? ? {} : r[pair[0]]) : pair[1] }
end

機能的にはこれで十分です。ありがとうございました。
----------------------------------------
http://redmine.ruby-lang.org/issues/show/2540

----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next