読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(rust report) iter系の使い分け

hermanradtke.com

箇条書きで要約:

  • まずはiter()から考える
  • 要素を変更する時は, iter_mut()
  • cloned = map(clone)が用意されている (効率がいいのかな?)
  • もしborrowしてからclone()して所有権をとってるならば, iter()ではなくinto_iter()を使うのがよいサインかも
  • intoは, 所有権をmoveして何かを作る時に使われる言葉 (cf. std::convert::Into)
  • Iteratorはinto_iter()を実装している. だからinto_iter()は無限にchain出来る. それは自身を返す. identity functionだ.
  • forはマクロ. &vecはvec.iter()に, &mut vecはver.iter_mut()に, vecはinto_iter()に変換される
  • forは概ね以下の形になる.
let mut it = values.into_iter();
loop {
    match it.next() {
        Some(x) => println!("{}", x),
        None => break,
    }
}

だから

fn main() {
  let mut v = vec![1,2,3];
  for e in &mut v {
    v.push(*e)
  }
}

は, "cannot borrow v as mutable more than once at a time"と怒られる.