我有一个带有可选自我引用的结构:
struct Pathnode {
pos: Pos,
parent: Option<Rc<Pathnode>>,
}
我要遵循parent
参考,直到根节点之前的第一个子节点(根节点没有父节点)。我尝试了以下代码:
let mut head: Pathnode = node;
while head.parent.is_some() {
head = *head.parent.unwrap();
}
但这无法编译并出现以下错误:
error[E0507]: cannot move out of borrowed content
--> file.rs on line 134:24
|
139 | head = *head.parent.unwrap();
| ^^^^^^^^^^^^^^^^^^^^^ cannot move out of borrowed content
如何从Pathnode
中获得Rc
?或者,我可以为head
使用什么其他数据类型?如果最后只得到不可变的引用或类似内容,也可以。
答案 0 :(得分:3)
您应该使用引用而不是尝试移动值。这应该起作用:
let mut head: &Pathnode = &node;
while head.parent.is_some() {
head = head.parent.as_ref().unwrap();
}
您的代码直接在unwrap()
上调用parent
,这消耗了Option
。无法将字段移出结构。
一个不错的选择是使用while let
:
let mut head: &Pathnode = &node;
while let Some(ref parent) = head.parent {
head = parent;
}