枚举
能够给成员增加元组属性,属性类型能够雷同,也能够不同。
enum FRUIT { APPLE = 0, BANANA = 1, ORANGE = 2, GRAPE =3,}#[derive(Debug)]enum IPADDR { V4(u8,u8,u8,u8), V6(String),}
let myFavorite = FRUIT::APPLE;println!("My favorite fruit is {:?}",myFavorite);println!("{:?} value is {:?}", FRUIT::APPLE, FRUIT::APPLE as i32);let myIP = IPADDR::V4(192,168,21,1);println!("My ip addr:{:?}", myIP);
通过match能够对enum中的值做相应解决,match不仅对enum也能够对根底类型进行对应解决。match能够看作是C/C++的switch(不须要break,每次匹配到对应的值解决完后主动break)
match myFavorite { FRUIT::APPLE => { println!("Red"); }, FRUIT::BANANA => { println!("Yellow"); }, FRUIT::ORANGE => { println!("Orange"); }, FRUIT::GRAPE => { println!("Purple"); },}
match的default的选项解决应用"_",示意除去下面列出的选项外所有值。
let num = 25; match num { 0..=9 => { println!("Num in [0..9]"); }, 10..=50 => { println!("Num in [10..50]"); }, 51..=100 => { println!("Num in [51..100]"); }, _ => { println!("Num out of valid range [0..100]"); } }
因为rust为了平安勾销了null,然而在默写非凡状况下null依然非常不便。rust引入了None,None同样是一个确认值。例如一个函数,依据计算结果返回值,但如果出现异常或者参数谬误,则返回有效None
enum ReturnOption{ Some(u32), None,}fn retValue(num:u32) -> ReturnOption { match num { 0..=9 => { println!("Num in [0..9]"); return ReturnOption::Some(0); }, 10..=50 => { println!("Num in [10..50]"); return ReturnOption::Some(1); }, 51..=100 => { println!("Num in [51..100]"); return ReturnOption::Some(2); }, _ => { println!("Num out of valid range [0..100]"); return ReturnOption::None; } }}
应用unwrap办法能够将Some()中的数值取出
let x = Some(33); println!("{}",x.unwrap())