写了一个迭代器的例子,只需要实现 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
即可,这个简单吧?