我刚接触 Rust,想知道为什么以下代码不会出现“不能同时将`val`作为可变引用借用多次”的错误。在到达`second_layer`函数时,我应该有三个对同一原始的`val`变量的引用:
感谢您的信件。
主函数体中的`val_ref`
第一个层级函数体中的`val_ref2`
第二个层级函数体中的`val_ref3`
感谢任何帮助!
fn first_layer(val_ref2: &mut String)
{
*val_ref2 = String::from("first_layer");
println!("{}", val_ref2);
second_layer(val_ref2);
}
fn second_layer(val_ref3: &mut String)
{
*val_ref3 = String::from("second_layer");
println!("{}", val_ref3);
}
fn main()
{
let mut val = String::from("asdf");
let val_ref: &mut String = &mut val;
first_layer(val_ref);
println!("{}", val_ref);
}
感谢您的信件。
val-ref
在main
中调用first_layer
后没有被移动并且仍然可以访问吗? - Joe_Jingyulet mut i = 0i32; let r1 = &mut i; let r2 = &mut *r1
能够编译通过,尽管它显然创建了对i
的别名可变引用?隐式重新借用的讨论并没有涉及到这一点,因为它只是解释了如何通过创建嵌套引用来防止引用被移动。它没有解释为什么允许嵌套内部引用别名外部数据。 - user4815162342