为什么Rust的if-let语句的赋值和else块都不允许可变借用?
struct Parent {
a: Option<()>,
b: (),
}
impl Parent {
fn mutate(&mut self) {}
}
fn main() {
let mut parent = Parent { a: Some(()), b: () };
if let Some(value) = &mut parent.a {
//some mutation on value
} else {
parent.mutate(); //error: cannot borrow `parent` as mutable more than once at a time
}
}
用下面的等效代码替换if-else可以编译,但是效果不佳。
if let Some(value) = &mut parent.a {
//some mutation on value
}
if let None = &mut parent.a { //or parent.a.is_none()
parent.mutate();
}