pubfnpush_front(&mut self, elem:T) {// new node needs +2 links, everything else should be +0let new_head =Node::new(elem);match self.head.take() {Some(old_head) => {// non-empty list, need to connect the old_head old_head.prev =Some(new_head.clone()); // +1 new_head new_head.next =Some(old_head); // +1 old_head self.head =Some(new_head); // +1 new_head, -1 old_head// total: +2 new_head, +0 old_head -- OK! }None=> {// empty list, need to set the tail self.tail =Some(new_head.clone()); // +1 new_head self.head =Some(new_head); // +1 new_head// total: +2 new_head -- OK! } }}
cargo builderror[E0609]: no field `prev` on type `std::rc::Rc<std::cell::RefCell<fourth::Node<T>>>`--> src/fourth.rs:39:26|39| old_head.prev =Some(new_head.clone()); // +1 new_head|^^^^ unknown fielderror[E0609]: no field `next` on type `std::rc::Rc<std::cell::RefCell<fourth::Node<T>>>`--> src/fourth.rs:40:26|40| new_head.next =Some(old_head); // +1 old_head|^^^^ unknown field
编译器错误。好的开始。好的开始。
为什么我们不能访问节点上的 prev 和 next 字段?以前我们只有一个 Rc<node> 的时候,它是有效的。似乎 RefCell 正在妨碍我们的工作。