我试图分两步构造一个结构,如下所示。
#[derive(Default)]
struct A<'a> {
a: Vec<i32>,
b: Vec<&'a i32>
}
impl<'a> A<'a> {
pub fn new() -> Self {
let mut x = A::default();
x.a = vec![1, 2, 3]; // --- STEP 1 ---
x.b = x.a // --- STEP 2 ---
.iter()
.filter_map(|v| match v {
v if *v >= 2 => Some(v),
_ => None
})
.collect();
x
}
}
fn main() {
let _ = A::new();
}
此代码无法编译(https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b95afd64be06faaf4f26c36e77166c1b)。我不知道为什么。
我希望将每个元素A::b
的生命周期标记为与A
相同,这样可以确保在移动值后我不会借用它们。那是x.a
的借用不能超过x
在返回时的移动。
为什么借位检查员抱怨?