[#39845] Re: [ruby-cvs:33238] Ruby:r26022 (trunk): * marshal.c (w_object): dump instance variables when using — Tanaka Akira <akr@...>
2009/12/5 <nobu@ruby-lang.org>:
3 messages
2009/12/06
[#39846] [Bug #2447] reduce GC pressure by symbol table without String instance — Yusuke Endoh <redmine@...>
Bug #2447: reduce GC pressure by symbol table without String instance
5 messages
2009/12/06
[#39847] stable find.rb — Tanaka Akira <akr@...>
ディレクトリを再帰的にたどった結果を比較することがあったのですが、
5 messages
2009/12/06
[#39851] Time.now + str と #to_r — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
9 messages
2009/12/07
[#39852] Re: Time.now + str と #to_r
— "NARUSE, Yui" <naruse@...>
2009/12/07
成瀬です。
[#39855] [RubySpec #2460] RubySpecでFiberのSpecがおちる — 三村 益隆 <redmine@...>
RubySpec #2460: RubySpecでFiberのSpecがおちる
4 messages
2009/12/08
[#39863] [Feature #2471] want to choose a GC algorithm — _ wanabe <redmine@...>
Feature #2471: want to choose a GC algorithm
8 messages
2009/12/09
[#39874] faster Enumerator#each by rb_block_call with current block — Yusuke ENDOH <mame@...>
遠藤です。
7 messages
2009/12/13
[#39894] Re: faster Enumerator#each by rb_block_call with current block
— Yukihiro Matsumoto <matz@...>
2009/12/19
まつもと ゆきひろです
[#39897] Re: faster Enumerator#each by rb_block_call with current block
— Yusuke ENDOH <mame@...>
2009/12/20
遠藤です。
[#39912] [Bug #2522] Segmentation Fault is occurred on r26158 by running rubyspec — Kenta Murata <redmine@...>
Bug #2522: Segmentation Fault is occurred on r26158 by running rubyspec
4 messages
2009/12/23
[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