锈书说
“对于特定范围内的特定数据,您只能有一个可变引用”
据我所知,以下工作代码通过同时具有 2 个可变引用与此相矛盾:
fn main() {
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = &mut s;
}
Run Code Online (Sandbox Code Playgroud)
代码只是对本书中的这个例子稍作修改:
fn main() {
let mut s = String::from("hello");
{
let r1 = &mut s;
} // r1 goes out of scope here, so we can make a new reference with no problems.
let r2 = &mut s;
}
Run Code Online (Sandbox Code Playgroud)
这本书暗示只能进行第二个可变引用,因为第一个超出范围,但是当我修改代码以使第一个引用不会超出范围时,它仍然可以编译。为什么这是允许的?我认为 Rust 一次只能允许 1 个可变引用。