1.match
允许一个值与一系列模式进行匹配,并执行匹配成功的模式所对应的代码
模式可以是字面值、变量名、通配符
enum Coin {
Fen,
Jiao,
Yuan,
Baiyuan,
}
fn main() {
println!("Hello, world!");
let a = value_in_cents(Coin::Fen);
println!("{}",a);
}
fn value_in_cents(coin: Coin) -> u32 {
match coin {
Coin::Fen => {
println!("我是1分");
1
},
Coin::Jiao => 10,
Coin::Yuan => 100,
Coin::Baiyuan => 10000,
}
}
2.绑定值的模式匹配
匹配的分支可以绑定被匹配对象的部分值,因此可以从enum变体中提取值
enum Coin {
Fen,
Jiao,
Yuan,
Baiyuan,
Quarter(Province),
}
#[derive(Debug)]
enum Province {
Hebei,
Beijing,
}
fn main() {
println!("Hello, world!");
let a = value_in_cents(Coin::Fen);
println!("{}",a);
let b = value_in_cents(Coin::Quarter(Province::Beijing));
println!("{}",b);
}
fn value_in_cents(coin: Coin) -> u32 {
match coin {
Coin::Fen => {
println!("我是1分");
1
},
Coin::Jiao => 10,
Coin::Yuan => 100,
Coin::Baiyuan => 10000,
Coin::Quarter(state) => {
println!("{:?}",state);
1000
}
}
}
这里是把一个为枚举的值传入到了enum变体中
3.匹配 Option< T >
fn main() {
let one = Some(1);
let two = add_one(one);
let none = add_one(None);
println!("{:?}{:?}{:?}",one,two,none); // Some(1)Some(2)None
}
fn add_one(x: Option<i32>) -> Option<i32> {
match x {
None => None,
Some(i) => Some(i + 1),
}
}
4.match 匹配的时候必须穷举所有可能
需要注意的是,在匹配Option< T >的时候,要考虑None的情况
如果有很多,不想都写上,可以使用_下划线通配符来代替其余没有列出的值
fn main() {
let v = 1u8;
match v {
1 => println!("1"),
2 => println!("2"),
_ => (),
}
println!("{}",v);
}
如果v = 0,那么输出一个1
如果v = 1,那么输出两个1