- ベストアンサー
RubyのEnumeratorについて質問です
「Enumeratorとはeach 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使える」 と書いてあるのですが、 具体的な意味や、実装の仕方が分かりません。 また、このクラスを使うことにより、どのような利点があるのかもお聞きしたいです 回答よろしくお願いいたします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
最近あった便利な使い方を まず使わなくても良い例を array=[1,2,2,4] results=[] array.each_cons(2){|a,b| results << a+b} 配列の隣の値を足し算した結果をresultsに入れて返します。 each_cons(2)自体は{}の中の結果を返してくれませんので、resultsが必要になってきます。 array.each_cons(2).collect{|a,b| a+b} のようにcollectを入れると式の値として同じ配列を返してくれますので、少しはすっきりします。 このように後ろにcollectを入れても問題のないものもありますが、{}が直後にないとエラーが出るものがあります。 最近であったものでarray.each_symbol{|a| ???} がありました。each_symbol.collect{...}としたかったのですが、エラーになります。 そのときは array.enum_for(:each_symbol).collect{|a| ???} で期待通りの振る舞いをしてくれます。 YAML.each_document(open("filename")){|a| ....} の場合は t=YAML.enum_for(:each_document, open("filename")) のように使えます。外部イテレータとしてはこの後に loop do a=t.next # aの処理 end