此代码是从迭代器生成一组唯一项的低效方法.为了实现这一点,我试图用a Vec来跟踪我所见过的值.我认为这Vec需要由最里面的封闭所拥有:
fn main() {
let mut seen = vec![];
let items = vec![vec![1i32, 2], vec![3], vec![1]];
let a: Vec<_> = items
.iter()
.flat_map(move |inner_numbers| {
inner_numbers.iter().filter_map(move |&number| {
if !seen.contains(&number) {
seen.push(number);
Some(number)
} else {
None
}
})
})
.collect();
println!("{:?}", a);
}
Run Code Online (Sandbox Code Playgroud)
但是,编译失败了:
error[E0507]: cannot move out of captured outer variable in an `FnMut` closure
--> src/main.rs:8:45
|
2 | let mut seen = vec![];
| -------- captured outer variable
...
8 | inner_numbers.iter().filter_map(move …Run Code Online (Sandbox Code Playgroud)