【发布时间】:2014-04-27 20:38:40
【问题描述】:
我正在尝试编写一个递归方法,将一个项目添加到树中并返回与该项目对应的树节点。
enum BstNode {
Node(int, ~BstNode, ~BstNode),
Leaf
}
impl BstNode {
fn insert<'a>(&'a mut self, item: int) -> &'a mut BstNode {
match *self {
Leaf => {
*self = Node(item, ~Leaf, ~Leaf);
self
},
Node(ref node_item, ref mut left, ref mut right) =>
match item.cmp(node_item) {
Less => left.insert(item),
Equal => self,
Greater => right.insert(item)
}
}
}
}
我被以下错误所困扰:
bst.rs:19:30: 19:34 error: cannot move out of `self` because it is borrowed
bst.rs:19 Equal => self,
^~~~
bst.rs:16:18: 16:31 note: borrow of `self#0` occurs here
bst.rs:16 Node(ref node_item, ref mut left, ref mut right) =>
^~~~~~~~~~~~~
“搬出something”是什么意思?如何解决此错误?
我正在使用 Rust 0.10。
【问题讨论】:
标签: pattern-matching rust lifetime