type NodePointer<T> = Option<Rc<RefCell<Node<T>>>>;
#[derive(Debug)]
struct Node<T> {
val: T,
next: NodePointer<T>
}
pub struct LinkedList<T> {
head: NodePointer<T>,
tail: NodePointer<T>,
length: u32
}
impl <T: Display> Display for LinkedList<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let mut current = self.head.clone();
while let Some(node_rc) = current {
let node = node_rc.borrow_mut();
write!(f, "{} ", node.val)?;
current = node.next.clone();
}
Ok(())
}
}
我试图制作一个 LinkedList 来学习 Rust,但在这里我陷入了一个相当奇怪的错误。在
fmt
函数中使用 node_rc.borrow()
给我
consider giving `node` an explicit type, where the type for type parameter `Borrowed` is specified: `: &Borrowed`
但是使用
borrow_mut
而不是 borrow
不会导致同样的错误,为什么?
我找到了一个解决方案,这是因为 rust-analyzer 正在从
borrow::Borrow
而不是 cell::RefCell
导入借用。这不是与 Rust 工作方式相关的错误。只是错误的导入。删除使用 std::borrow::Borrow
解决了这个问题。