-
定义枚举
枚举允许我们列举所有可能的值来定义一个类型
关键字enum
enum IpAdd{//枚举的变体可以是任意类型的甚至可以是结构体struct
v4(u8, u8, u8, u8),
v6(String),
v8{one:u32, two:u32},//匿名结构体
}
fn main(){
let four = IpAdd::v4(127, 0, 0, 1);//两个IpAdd的实例
let six = IpAdd::v6(String::from("::1"));
let eight = IpAdd::v8{one:1, two:2};
route(four);
route(six);
}
fn route(ip_kind:IpAdd){
}
为枚举定义方法
impl IpAdd{//为枚举类型定义方法
fn call(&self){
}
}
//调用枚举方法
let four = IpAdd::v4(127, 0, 0, 1);//必须在实例中调用
four.call();
-
Option枚举
Rust中没有null,但null的概念是存在的
Option<T>, T为数据类型,存在于标准库中 有Some和None两个变体,两个变体可以直接使用
fn main(){
let some_number = Some(5);
let some_string = Some("A String");
let absent_number:Option<i32> = None;
}
-
match
match 枚举实例{
枚举类型::变体=>*,
}
enum Coin{
Penny,
Nickel,
Dime,
}
fn main(){
let coin = Coin::Nickel;
println!("{}", m(&coin));//2
}
fn m(coin:&Coin)->u32{
match coin{
Coin::Penny=>1,
Coin::Nickel=>2,
Coin::Dime=>3,
}
}
match结构中必须要穷举所有的模式
"_"可以忽略不想匹配的模式
-
if let
处理只关心一种匹配而忽略其他匹配的情况