【问题标题】:Modifying a value inside an enum while matching匹配时修改枚举中的值
【发布时间】:2016-08-11 16:58:32
【问题描述】:

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

即使我使用了ref muterror: cannot borrow immutable anonymous field `a.0` as mutable 也会失败。

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),
}

但这是正确的方法吗?

【问题讨论】:

    标签: enums pattern-matching rust


    【解决方案1】:

    您需要使绑定到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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 1970-01-01
      • 2022-09-27
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2012-04-30
      • 1970-01-01
      相关资源
      最近更新 更多