在以下情况下,借用检查器存在问题:首先,我存储了对可变变量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]);
}