せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】Enumerable と Enumerator の違い がやっぱりピンとこない

■Topic
I study about Enumerable and Enumrator. but i still wonder about it.


うーん。。。。
Enumerator は Enumerable を継承しているから、より限定されているイメージ。

例えば、

[1,2,3].with_index{|e, i| e+i }     ←NoMethodError
[1,2,3].map.with_index{|e, i| e+i }  ←[1, 3, 5]
[1,2,3].select.with_index{|e, i| e+i < 5 } ←[1, 2]

あーなるほど。。
Enumerable に、イテレート方法を合わせたものが Enumerator というイメージかな。

ちなみにインデックスを使った結果を返したい場合は、

[1,2,3].select.with_index{|e, i| e+i < 5 }
[1,2,3].map.with_index.with_object([]){|(e, i), arr| arr << e+i if e+i < 5 }

■実行結果

[1, 2]
[1, 3]

ううむ。