0023-Rust-自实现迭代器

环境

  • Time 2022-05-19
  • Rust 1.60.0

前言

说明

参考:https://doc.rust-lang.org/std/iter/index.html

目标

针对自定义类型,实现一个迭代器。

自定义类型

#[derive(Default, Debug)]
struct Counter {
    value: usize,
}

自定义迭代器

pub trait MyIterator {
    type Item;
    fn my_next(&mut self) -> Option<Self::Item>;
}

实现迭代器

impl MyIterator for Counter {
    type Item = usize;

    fn my_next(&mut self) -> Option<Self::Item> {
        self.value += 1;
        if self.value < 5 {
            Some(self.value)
        } else {
            None
        }
    }
}

使用迭代器

fn main() {
    let mut counter = Counter::default();
    while let Some(value) = counter.my_next() {
        println!("value: {value:?}")
    }
}

解析

Iterator

其实标准库已经有一个迭代器的 trait 了,不需要再定义一个,直接使用就可以。

pub trait Iterator {
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}

完整代码

fn main() {
    let mut counter = Counter::default();
    while let Some(value) = counter.next() {
        println!("value: {value:?}")
    }
}

#[derive(Default, Debug)]
struct Counter {
    value: usize,
}

impl Iterator for Counter {
    type Item = usize;

    fn next(&mut self) -> Option<Self::Item> {
        self.value += 1;
        if self.value < 5 {
            Some(self.value)
        } else {
            None
        }
    }
}

总结

针对自定义类型,自己实现了一个迭代器方法,并直接使用了标准库的 Iterator

附录

posted @ 2022-08-29 17:39  波尔  阅读(69)  评论(0编辑  收藏  举报