From: Makoto Cyross Date: 2009-12-30T22:52:57+09:00 Subject: [ruby-dev:39936] [Feature #2540] Hash#contribute 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