3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Rust] Result<T, E> は IntoIterator

Posted at

今日ハマって時間を無駄にしたこと: Result<T, E>IntoIterator です. .into_iter() すると, Ok(_) なら 1 回だけ中身を返し, Err(_) なら何も返さないイテレータとして使えます.

公式ドキュメント からの例 (を改変した例). 例えばこのコードは 1 回だけ 5 を表示します.

fn main() {
    let iter: Result<i32, &str> = Ok(5);
    
    for x in iter {
        println!("{}", x);
    }
}

Err(_) にすると何も表示しません.

fn main() {
    let iter: Result<i32, &str> = Err("This is an error.");
    
    for x in iter {
        println!("{}", x);
    }
}

ちなみに &Result<T, E>, Option<T>, &Option<T>, &mut Option<T>IntoIterator なので同じ使い方ができます.

よく考えると, Vec<T> とか HashMap<K, V, S>IntoIterator であるのと同じように, これらも中に要素を持つインスタンスですから IntoIterator であるのがある意味自然なのかもしれません.

参考文献

Rustのイテレータの網羅的かつ大雑把な紹介 という記事でもこのことは言及されていました.

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?