Rust勉強メモ/イテレータ
IntoIteratorトレイト
「プログラミングRust 第2版」p.321
code:Rust
trait IntoIterator where Self::IntoIter: Iterator<Item=Self::Item> {
type Item;
type IntoIter: Iterator;
fn into_iter(self) -> Self::IntoIter;
}
IntoIterは、イテレータを生成することができるトレイト
IntoIteratorを実装するすべての型をイテレート可能(iterable)と呼ぶ。
イテレータの糖衣構文
「プログラミングRust 第2版」p.321
code:forで暗黙のイテレータ使用(糖衣構文).rs
for element in &v {
println!("{}", element);
}
code:明示的にイテレータを使う.rs
let mut iterator = (&v).into_iter();
while let Some(element) = iterator.next() {
println!("{}", element);
}
forループにイテレータを渡すことも可
どのIteratorもIntoIteratorを実装しており、.into_iter()で自分自身を返す
.into_iter()と.iter()の違い
「プログラミングRust 第2版」p.324
.iter()、.iter_mut()は参照を返す
(&foo).into_iter()よりfoo.iter()の方が簡潔
v.into_iter()はvの型によって3種類(値、共有参照、可変参照)を返す
.into_iter()はforの実行に必須
.into_iter()はトレイトIntoIteratorで規定されていて、ジェネリックなコードを書ける
.iter()はトレイトに属していない
&strには.iter()はなく、.bytes()や.chars()がある