結果は最後の反復処理におけるaccumulatorの値になります。最終的な結果となります。これが得られる結果となります。ふぅ、ようやく説明し終わりました。初めのうちこそ少し奇妙に見えるかもしれませんが、一度理解すればあらゆる場面で使えるでしょう。イテレータにはまだ話していないもう1つの性質、遅延性があり、コンシューマはそれに関連して重要な役割を担っています。それではもっと詳しくイテレータについて話していきましょう、そうすればなぜコンシューマが重要なのか理解できるはずです。メソッドを繰り返し呼び出すことができ、その都度順番に値を返すものです。あり、前もって全ての値を生成できないことがわかります。値は実際には生成されておらず、代わりにただシーケンスを表すだけの値を生成しています。1..100;私たちはレンジを何にも使っていないため、値を生成しません。コンシューマを追加してみましょう。幾つかの数値を渡してくれるレンジを要求し、シーケンスを生成する作業を行います。レンジは基本的な2つのイテレータのうちの1つです。ベクタを順に各要素を渡すシンプルなイテレータへ変換できます。num);}これら2つの基本的なイテレータはあなたの役に立つはずです。無限を扱えるものも含め、より応用的なイテレータも幾つか用意されています。これでイテレータについては十分でしょう。私たちがイテレータに関して最後に話しておくべき概念がイテレータアダプタです。イテレータを受け取って何らかの方法で加工し、新たなイテレータを生成します。その中でも最も単純なものです。別のイテレータについて呼び出され、各要素の参照をクロージャに引数として与えた結果を新しいイテレータとして生成します。値を返してくれるでしょう。えーっと、厳密には少し違います!もしこの例をコンパイルすると、こんな警告が出るはずです。^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~また遅延性にぶつかりました!このクロージャは実行されませんね。以下の例は何の数字も出力されません。他にも面白いイテレータアダプタは山ほどあります。要素目までを実行するイテレータを返します。先程言及していた無限を扱えるイテレータで試してみましょう。引数としてクロージャをとるアダプタです。返した要素のみとなります。i);}これは1から100の間の偶数を全て出力します。渡されたクロージャには要素そのものではなく要素への参照が渡されます。パターンを使って整数を取り出しています。実装は返り値のイテレータに所有権を渡すために要素への所有権を保持しておかないとならないのです。章では紹介されていません。パターンとは異なりますので注意して下さい。あなたはここまでに説明された3つの概念を全て繋げることができます。イテレータから始まり、アダプタを幾つか繋ぎ、結果を消費するといった感じです。入ったベクタがあなたに渡されます。イテレータ、イテレータアダプタ、そしてコンシューマがあなたの助けになることをほんの少しだけ体験できました。本当に便利なイテレータが幾つも用意されていますし、あなたがイテレータを自作することもできます。イテレータは全ての種類のリストに対し効率的な処理方法と安全性を提供します。これらは初めこそ珍しいかもしれませんが、もし使えばあなたは夢中になることでしょう。