在匹配时修改枚举内的值

时间:2016-08-11 16:58:32

标签: enums pattern-matching rust

是否可以直接修改枚举中嵌入的值?

以下error: cannot borrow immutable anonymous field `a.0` as mutable失败,即使我使用了ref mut

enum Foo {
    Bar(usize),
}

fn main() {
    let a = Foo::Bar(10);

    match a {
        Foo::Bar(ref mut val) => *val = 33,
    }
    match a {
        Foo::Bar(val) => println!("{}", val), // should print 33
    }
}

这不是一个大问题,因为我可以做以下的解决方法:

match a {
    Foo::Bar(val) => a = Foo::Bar(33),
}

但这是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

您需要将a的绑定设为可变。

enum Foo {
    Bar(usize),
}

fn main() {
    let mut a = Foo::Bar(10);

    match a {
        Foo::Bar(ref mut val) => *val = 33,
    }
    match a {
        Foo::Bar(val) => println!("{}", val), // 33
    }
}