枚举
可以给成员添加元组属性,属性类型可以相同,也可以不同。
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())
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。