如何让借阅检查器知道参考不再存在?

时间:2019-04-22 22:15:15

标签: rust

在以下情况下,借用检查器存在问题:首先,我存储了对可变变量x的不可变引用,该变量后来在代码中的其他地方使用。现在,我要更改x的值。知道在foo.bar中存在对它的不可变引用,首先我通过调用foo.bar.clear()删除该引用。

现在没有不可变的借项了,我希望我可以对对象进行突变,但是事实并非如此。我认为问题是编译器无法知道clear()将引用丢弃在foo.bar内,但是我不知道如何在这种情况下进行。

最小示例:

struct Foo<'a> {
    bar: Vec<&'a i32>
}

fn main() {
    let mut x = 42;
    let mut foo = Foo { bar: vec![&x] };
    // Do immutable stuff with foo.bar[0]... then:
    foo.bar.clear();
    x += 1;
    foo.bar.push(&x);
    println!("X is: {}", foo.bar[0]);
}

0 个答案:

没有答案