rust腐竹是什么意思_模式匹配 – Rust:“无法移出`self`,因为它是借来的”错误...

我正在尝试编写一个递归方法,将一个项添加到树中并返回与该项对应的树节点.

enum BstNode {

Node(int, ~BstNode, ~BstNode),

Leaf

}

impl BstNode {

fn insert(&'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) =>

^~~~~~~~~~~~~

“搬出来”是什么意思?我该如何解决这个错误?

我正在使用Rust 0.10.

最佳答案 在您的示例node_item中,左侧和右侧由自变量拥有.借用检查员不知道在平等分支中

match item.cmp(node_item) {

Less => left.insert(item),

Equal => self,

Greater => right.insert(item)

}

既不使用node_item,也不使用left或right,但是它看到self正在移动(你正在返回它),而这3个变量仍然被借用(你仍然在匹配的词法范围内,借用它们).我认为这是一个已知的错误,这种行为过于严格,请参阅issue #6993.

至于修复代码的最佳方法,说实话,我不确定.我会使用一个完全不同的结构(至少在修复上一个错误之前):

pub struct BstNode {

item: int,

left: Option,

right: Option

}

impl BstNode {

pub fn insert(&'a mut self, item: int) -> &'a mut BstNode {

match item.cmp(&self.item) {

Less => match self.left {

Some(ref mut lnode) => lnode.insert(item),

None => {

self.left = Some(~BstNode {item: item, left: None, right: None});

&mut **self.left.as_mut().unwrap()

}

},

Equal => self,

Greater => match self.right {

Some(ref mut rnode) => rnode.insert(item),

None => {

self.right = Some(~BstNode {item: item, left: None, right: None});

&mut **self.right.as_mut().unwrap()

}

}

}

}

}

这样,当您返回节点时,您的任何成员都不会被借用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值