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

From: Makoto Cyross <redmine@...>
Date: 2009-12-30 13:52:57 UTC
List: ruby-dev #39936
Feature #2540: Hash#contribute
http://redmine.ruby-lang.org/issues/show/2540

起票者: Makoto Cyross
ステータス: Open, 優先度: Normal
カテゴリ: core, Target version: 1.9.2

初めてチケット切ります。不備がございましたらご指摘ください。

***

現在、Hashにキーと値を設定したいときに、[]=とstoreの2種のメソッドがあります。
しかし、これらのメソッドは更新したselfを返さないため、Hashをマージする(Hash#mergeとは違い、深く検索するマージ)処理を書いたときは、どうしても1行で収まらなくなります

# base:マージするハッシュ
# hash:マージ対象ハッシュ
def merge2(base, hash = {})
  base.each{|key, value| hash[key] = value.kind_of?(Hash) ? merge(value, hash[key].nil? ? {} : hash[key]) : value }
  hash
end

そこで、Hashにキーと値を設定する追加のメソッドとして、Hash#contributeを提案いたします。
機能は、selfを返す以外はHash#storeと同等です。
これを使うときは、injectを使って、1行で済むようになります。

# base:マージするハッシュ
# hash:マージ対象ハッシュ
def merge2(base, hash = {})
  base.keys.inject(hash){|r, key| r.contribute(key, base[key].kind_of?(Hash) ? merge2(base[key], r[key].nil? ? {} : r[key]) : base[key] }
end

ご検討よろしくお願いいたします。


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

In This Thread

Prev Next