构造结构时的寿命和借阅检查器

时间:2019-10-31 02:41:29

标签: rust lifetime borrow-checker

我试图分两步构造一个结构,如下所示。

#[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在返回时的移动。

为什么借位检查员抱怨?

0 个答案:

没有答案