【发布时间】:2017-12-05 01:05:09
【问题描述】:
我只需要找到下一个数字相同的数字:[1,2,2,3,4,4] 应该产生 [2,4]。由于我需要查看下一个数字,我想我会尝试使用Peekable iterator 并写一个filter。
fn main() {
let xs = [1, 2, 2, 3, 4, 4];
let mut iter = xs.iter().peekable();
let pairs = iter.filter(move |num| {
match iter.peek() {
Some(next) => num == next,
None => false,
}
});
for num in pairs {
println!("{}", num);
}
}
我收到一个错误:
error[E0382]: capture of moved value: `iter`
--> src/main.rs:6:15
|
5 | let pairs = iter.filter(move |num| {
| ---- value moved here
6 | match iter.peek() {
| ^^^^ value captured here after move
|
= note: move occurs because `iter` has type `std::iter::Peekable<std::slice::Iter<'_, i32>>`, which does not implement the `Copy` trait
我认为这是因为 iter 正在被闭包使用,但它没有借用它,也无法复制它。
如何解决想要在过滤器中引用迭代器的问题?
【问题讨论】: