From: Yusuke ENDOH Date: 2011-05-11T08:59:20+09:00 Subject: [ruby-dev:43516] Re: [Ruby 1.9 - Feature #4653] [PATCH 1/1] new method Enumerable#rude_map 遠藤です。 2011年5月10日23:09 Shota Fukumori : > 共通なconvensionを用意すると発散すると書かれていたのにやってしまいましたが、 > > Enumerator#deferを定義してこのような形にすると良いのではと思いました。 見栄えはいいですが、残念ながら共通の convension にはなりません。 $ ./ruby -e 'p [1, 2, 3].select {|x| x.even? }' [2] $ ./ruby -e 'p [1, 2, 3].select.defer {|x| x.even? }.to_a' [false, true, false] この問題は、map やら select やらが Array を返すこと前提で、内部的に rb_ary_push を呼んでしまっているため、中間データ生成を回避しようが ないということです。なので mapL 、selectL というように各メソッドごとに 対応していかざるを得ません。 Enumerator から Array を得るのは to_a 一発なので、デフォルトで Array ではなく Enumerator を返してくれれば解決なんですが。 互換性以外は。。 -- Yusuke Endoh