[ruby-dev:31798] generator from Enumerable#map

From: "Yusuke ENDOH" <mame@...>
Date: 2007-09-19 14:18:33 UTC
List: ruby-dev #31798
遠藤と申します。

1.9 では、Enumerable#map や Enumerable#index をブロックなしで呼ぶと
generator を返すようですが、これは Object#to_enum と何か異なるの
でしょうか。


$ ./ruby -ve 'g = [:a, :b, :c].map; loop { p g.next }'
ruby 1.9.0 (2007-09-15 patchlevel 0) [i686-linux]
:a
:b
:c


$ ./ruby -ve 'g = [:a, :b, :c].index; loop { p g.next }'
ruby 1.9.0 (2007-09-15 patchlevel 0) [i686-linux]
:a
:b
:c


特にこれらに意味がないのであれば、仕様を変える必要がないような気がする
のですが、どうでしょうか。


Enumerator で yield の返り値相当などを指定できるなら意味がありそうです。
例えば Enumerator#value= と #result を入れてこんな風に。


g = [1, 2, 3].map
loop { x = g.next; g.value = x * 2 }
p g.result #=> [2, 4, 6]


g = [:a, :b, :c].index
loop { x = g.next; g.value = x == :b }
p g.result #=> 1

--
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next