0
点赞
收藏
分享

微信扫一扫

Rust:编写自己的迭代器

程序员知识圈 2022-05-05 阅读 66

写了一个迭代器的例子,只需要实现 Iterator 即可。代码如下:

struct MyIter {
    n: i32,
}

impl Iterator for MyIter {
    type Item = i32;
    fn next(&mut self) -> Option<Self::Item> {
        self.n -= 1;
        if self.n < 0 {
            None
        } else {
            Some(self.n)
        }
    }
}

fn main() {
    let x = MyIter { n: 10 };
    for p in x {
        println!("{}", p);
    }
}

实际上所谓的迭代器,只需要做好三件事情:赋初值、获取增量、判断结束。能不能实现一个 iter() 这样的函数呢?没问题,看下面的例子:

struct MyIter {
    n: i32,
}

impl Iterator for MyIter {
    type Item = i32;
    fn next(&mut self) -> Option<Self::Item> {
        self.n -= 1;
        if self.n < 0 {
            None
        } else {
            Some(self.n)
        }
    }
}

fn my_iter() -> MyIter {
    MyIter { n: 10 }
}
fn main() {
    for p in my_iter() {
        println!("{}", p);
    }
}

只要返回的数据类型实现 Iterator 即可,这个简单吧?

举报

相关推荐

0 条评论