Consume Iterator

只要迭代器上的某个方法 A 在其内部调用了 next 方法,那么 A 就被称为消费性适配器:因为 next 方法会消耗掉迭代器上的元素,所以方法 A 的调用也会消耗掉迭代器上的元素。

注意,这里会拿走的是迭代器的所有权,而非原来变量的所有权。例如,sum() 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn main() {
let v1 = vec![1, 2, 3];

let v1_iter = v1.iter();

let total: i32 = v1_iter.sum();

assert_eq!(total, 6);

// v1_iter 是借用了 v1,因此 v1 可以照常使用
println!("{:?}",v1);

// 以下代码会报错,因为 `sum` 拿到了迭代器 `v1_iter` 的所有权
// println!("{:?}",v1_iter);
}

Adapt Iterator

会返回一个新的迭代器。迭代器仍然是惰性的,不操作就不会进行求值。这也意味着我们需要一个 consumer 来消费这个迭代器,如 .collect() 方法。