首页 > 解决方案 > Rust - 为什么借用 &mut 两次时它不会给我一个错误

问题描述

我正在查看这个 rust 文档 https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-02-references-and-borrowing.html

当我借用 &mut 两次时,我不会看到任何错误(请参阅下面的代码),谁能告诉我为什么?

let mut s = String::from("hello");

let r1 = &mut s;
let r2 = &mut s;

标签: rustreferencemutableborrow

解决方案


这是由于非词汇生命周期。编译器认识到,由于第一个引用在创建第二个引用之后从未使用过(或者在您的示例中根本没有使用),因此可以简单地删除它,从而允许创建第二个引用。

如果我们尝试用下面的例子来延长第一个引用的生命周期,我们会得到一个关于有多个可变引用的错误,正如预期的那样:

let mut s = String::from("hello");

let r1 = &mut s;
let r2 = &mut s; // error[E0499]: cannot borrow `s` as mutable more than once at a time

drop(r1);

推荐阅读