我试图使用嵌套迭代器,其中内部迭代器使用来自外部迭代器的值。为什么嵌套的迭代器闭包不会复制外部范围的值
vec![0;10].iter().flat_map(|&a| {
(0..10).map(|b|{
a + b
})
});
error:
a
does not live long enough(0..10).map(|b|{ ^^^
note: reference must be valid for the method call...
此编译如果我将内罩(move |b|{
),但我不明白为什么它是必要的,因为a
是一个整数,可以被复制而不是移动。
https://doc.rust-lang.org/book/closures.html#closures-and-their-environment 默认情况下,短暂关闭借用其环境。随着'移动'它取得了环境的所有权。如果价值可复制,它不能被移动并将被复制。 – aSpex