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
    }
}

putao
8 声望3 粉丝

推动世界向前发展,改善民生。


下一篇 »
rust--Arc