用一个小例子来说明这个问题.以下内容进行了编译:
fn main() {
let value: u32 = 15;
let mut ref_to_value: &u32 = &0;
fill_object(&mut ref_to_value, &value);
println!("referring to value {}", ref_to_value);
}
fn fill_object<'a>(m: &mut &'a u32, v: &'a u32) {
*m = v;
}
现在,下面给出了一个关于可变借入和不可变借入的编译时错误:
fn fill_object<'a>(m: &'a mut &'a u32, v: &'a u32) {
*m = v;
}
fill_object(&mut ref_to_value, &value);
| ----------------- mutable borrow occurs here
5 | println!("referring to value {}", ref_to_value);
| ^^^^^^^^^^^^
| |
| immutable borrow occurs here
| mutable borrow later used here
为什么?我假设,因为我现在已经为ref_to_value的引用指定了生存期‘a,所以该可变引用现在覆盖了整个作用域(即main).
我想弄清楚该如何思考这件事.