如何解决为什么 Rust 允许 2 个同时可变引用?
“对于特定范围内的特定数据,您只能有一个可变引用”
据我所知,以下工作代码通过同时具有 2 个可变引用与此相矛盾:
fn main() {
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = &mut s;
}
代码只是对书中的这个例子稍作修改:
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;
}
这本书暗示只能进行第二个可变引用,因为第一个超出了范围,但是当我修改代码以使第一个引用不会超出范围时,它仍然可以编译。为什么这是允许的?我认为 Rust 应该一次只允许 1 个可变引用。
解决方法
r1 仍在范围内,但您将无法使用它。那是因为它借了 s
。但是一旦r2
借了它,r1
就不再可用了。
例如,尝试添加
dbg!(r1);
你应该得到一个错误:
|
15 | let r1 = &mut s;
| ------ first mutable borrow occurs here
16 | let r2 = &mut s;
| ^^^^^^ second mutable borrow occurs here
17 |
18 | dbg!(r1);
| -- first borrow later used here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。