【发布时间】:2020-09-18 08:14:25
【问题描述】:
当尝试在 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() 编译失败。我想知道为什么会这样。
【问题讨论】:
-
最小的工作代码示例会有所帮助。您可以使用rust play 进行分享。
标签: rust dereference