环境
- 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
。