我无法理解why这会导致错误:
#[derive(Debug)]
pub struct Node {
next: Option<Box<Node>>,
}
pub fn print_root_or_next(root: &mut Node, try_next: bool) {
let mut current = root;
match &mut current.next {
Some(node) => {
if try_next {
current = &mut *node;
}
}
None => return,
}
println!("{:?}", current);
}
error[E0502]: cannot borrow `current` as immutable because it is also borrowed as mutable
--> src/lib.rs:17:22
|
8 | match &mut current.next {
| ----------------- mutable borrow occurs here
...
17 | println!("{:?}", current);
| ^^^^^^^
| |
| immutable borrow occurs here
| mutable borrow later used here
我看不出怎么会有相互冲突的借款;甚至错误信息似乎也表明两个借词是一个且相同的.这是借阅判断器的一个问题,还是这个示例在某些方面确实存在缺陷?
我对这个限制很感兴趣.我对实施情况了解不多,但考虑到基本if
:
if try_next {
current = &mut *current.next.as_mut().unwrap();
}
和基本match
:
match &mut current.next {
Some(node) => {
current = &mut *node;
}
None => return,
}
甚至把它们颠倒过来:
if try_next {
match &mut current.next {
Some(node) => {
current = &mut *node;
}
None => return,
}
}
所有的工作,必须有一些东西,借阅判断是或是没有考虑到,与我的理解冲突,为什么原来的形式不工作.