当我试图在 Rust 中实现双向链表时,我发现了以下意外错误。
if let Some(link) = self.tail.take() {
let x = link.borrow_mut();
link.borrow_mut().next = Some(node.clone());
} else { ... }
这里的链接被推断为Rc<RefCell<Node<..>>>
,而编译器报错如下:
不能将不可变的本地变量
link
作为可变引用借用。
尝试后,我猜测当use std::borrow::BorrowMut
时,会出现这个错误。
// compiles
fn test1() {
let a = Rc::new(RefCell::new(1));
let b = RefCell::new(1);
b.borrow_mut();
a.borrow_mut();
}
// doesn't compile
fn test2() {
use std::borrow::BorrowMut; // inserted this import!
let a = Rc::new(RefCell::new(1));
let b = RefCell::new(1);
b.borrow_mut();
a.borrow_mut();
}
这里test2()
无法编译通过。我想知道为什么会出现这种情况。