2016-08-11 9 views
1

列挙型の中に埋め込まれた値を直接変更することはできますか?照合中にenum内の値を変更する

ref mutを使用しましたが、error: cannot borrow immutable anonymous field `a.0` as mutableで以下が失敗します。

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

しかし、これは正しい方法である:私は回避策として、次の操作を行うことができるので、大きな問題ではない

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

答えて

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 
    } 
} 
+0

ありがとうございます! – Getkey

関連する問題