よりループから脱出しています。ループバージョンと同じ動作です。構成された処理を手軽に書ける方法というわけです。ループだけがイテレータを使う訳ではありません。トレイトを実装する必要があります。それは本書の範囲外ですが、Rustは多様な反復処理を実現するために便利なイテレータを幾つか提供しています。その前に、少しばかりレンジの限界について言及しておきましょう。レンジはとても素朴な機能ですから、度々別のより良い手段を用いることもあります。ここであるRustのアンチパターンについて考えてみましょう。ループの再現に用いることです。ベクタの中身をイテレートする必要があったとしましょう。あなたはこう書きたくなるかもしれません。nums[i]);}これは実際のイテレータの使い方からすれば全く正しくありません。あなたはベクタを直接反復処理できるのですから、こう書くべきです。num);}これには2つの理由があります。第一に、この方が書き手の意図をはっきり表せています。私たちはベクタのインデックスを作成してからその要素を繰り返し参照したいのではなく、ベクタ自体を反復処理したいのです。第二に、このバージョンのほうがより効率的です。いうようにインデックスを介し参照しているため、余計な境界チェックが発生します。イテレータが順番にベクタの各要素への参照を生成していくため、2つ目の例では境界チェックが発生しません。これはイテレータにとってごく一般的な性質です。不要な境界チェックを省くことができ、それでもなお安全なままなのです。動作という詳細が100%はっきりしていない処理があります。それ自体ではありません。は上手い具合に参照外し(dereferencing)をしてくれますから、これ以上深追いはしないことにします。以下のコードも正しく動作します。参照外しを行いました。私たちに参照を渡すのでしょうか?第一に、&を用いて私たちが明示的に要求したからです。第二に、もしデータそれ自体を渡す場合、私たちはデータの所有者でなければならないため、データの複製と、それを私たちに渡す操作が伴います。参照を使えば、データへの参照を借用して渡すだけで済み、ムーブを行う必要がなくなります。ここまでで、多くの場合レンジはあなたの欲する物ではないとわかりましたから、あなたが実際に欲しているものについて話しましょう。(consumers)の3つです。以下が定義となります。値のシーケンスを渡します。イテレータに作用し、出力の異なるイテレータを生成します。イテレータに作用し、幾つかの最終的な値の組を生成します。イテレータとレンジについて見てきましたから、初めにコンシューマについて話しましょう。イテレータに作用し、何らかの値を返すものです。このコードは全くコンパイルできませんが、意図するところは伝わるでしょう。イテレータが渡す沢山の値を全て受け取り、その結果をコレクションとして返します。それならなぜこのコードはコンパイルできないのでしょうか?Rustはあなたが集めたい値の型を判断することができないため、あなたが欲しい型を指定する必要があります。以下のバージョンはコンパイルできます。hint)を与え、整数型のベクタが欲しいと伝えることができます。いって常に型をまるごとを書く必要はありません。用いることで部分的に推論してくれます。私のために推論して下さい」という意味です。placeholder)と呼ばれることもあります。一般的なコンシューマですが、他にもあります。クロージャを引数にとり、イテレータの各要素の参照に対して処理を行います。