无法可变地借用if-let语句的else块

时间:2019-01-12 13:18:35

标签: rust borrow-checker

为什么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();
}

0 个答案:

没有答案