2016-05-05 41 views
2

我的简化代码:获取枚举的潜在变量

enum MyEnum { 
    A(u32), 
    B(String), 
    C(i32), 
} 

pub struct MyStruct { 
    aa: String, 
    bb: u16, 
    my_enum: MyEnum, 
} 

let my_struct1 = MyStruct { /*...*/ }; 

我怎样才能得到的my_struct1.my_enum潜在变量,它可能是一个u32Stringi32。仅通过模式匹配吗?

+0

[* Rust编程语言*](http://doc.rust-lang.org/stable/book/)涵盖以下主题:[enums](http://doc.rust-lang.org/stable /book/enums.html),['match'](http://doc.rust-lang.org/stable/book/match.html)和[patterns](http://doc.rust-lang。组织/稳定/电子书/ patterns.html)。 – Shepmaster

回答

3

模式匹配不限于match。如果你只关心一个变化版本的类型,你也可以做

if let MyEnum::B(s) = my_struct1.my_enum { 
    println!("{}", s); 
} 

my_struct1.my_enum值实际上是MyEnum::B类型的println线将只运行。锈enum是安全的。它不像C union,您可以随心所欲地访问底层值,无论该值实际为何类型。

+0

如果它们都具有相同的基础类型,比如像A那样的u32,那么如何获得该变量? –

+1

@OskarK。然后你需要使用'match':'let v = match my_struct1.my_enum {MyEnum :: A(a)=> a,MyEnum :: B(b)=> b,MyEnum :: C(c)=> c};'。 – WiSaGaN