假设我有一个IntoIter,我想从右到左收集n个元素的块(相当于切片上的rchunk).我可以在迭代器上调用.rev()
,然后为我想要收集的每个块调用.by_ref().take(n).rev()
.
let mut iter = vec![vec![0], vec![1], vec![2], vec![3]]
.into_iter()
.rev();
let vec1: Vec<_> = iter.by_ref().take(2).rev().collect();
println!("{:?}", vec1);
let vec2: Vec<_> = iter.by_ref().take(2).rev().collect();
println!("{:?}", vec2);
这适用于vec1
,但vec2
将为空.
我认为vec2
应该是[[0],[1]],而不是空的.看起来.rev()
方法不仅更改了Take迭代器,还更改了原始迭代器.它是在消耗原始迭代器,还是正在发生什么?