Iterator 定义了一个迭代器,专注于迭代行为本身:
你需要实现 next 方法来定义如何产生下一个元素。
使用上下文:当你已经拥有一个迭代器并希望对其进行操作(例如在方法链中、手动调用 next 等)。
IntoIterator 将一个对象转化为迭代器:
你需要实现 into_iter 方法来定义如何将对象转化为迭代器。
使用上下文:当你想将一个集合类型(例如 Vec, HashMap 等)转化为迭代器时,尤其是用于 for 循环和方法链的起始点。
在 Rust 中存在一个默认的实现,它允许所有实现了 Iterator 的类型自动也实现 IntoIterator。这实际上意味着,如果你为某个类型实现了 Iterator,你不需要手动为它实现 IntoIterator,因为它已经自动获得了这个实现。
struct Counter {
count: u32,
max: u32,
}
// 为 Counter 实现 Iterator 特性
impl Iterator for Counter {
type Item = u32;
fn next(&mut self) -> Option<u32> {
if self.count < self.max {
self.count += 1;
Some(self.count)
} else {
None
}
}
}
#[test]
fn test02() {
let counter = Counter { count: 0, max: 5 };
// 使用 IntoIterator::into_iter 转换自定义类型为迭代器
for val in counter {
println!("{}", val); // 输出 1, 2, 3, 4, 5
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。