Rust中使用match
关键字表示控制流运算符,它允许一个值与一系列模式进行匹配,并执行匹配模式对应的代码。其中,模式可以是字面值、变量名、通配符等。
介绍
定义
match 表达式 {
模式1 => ...,
模式2 => {
...
},
}
说明:
- match 会根据表达式的值,与下面的模式依次匹配
- match 必须穷举所有的可能,否则报
non-exhaustive patterns: x not covered
- 可以使用
_
通配符代替其余没有列举的可能,如 _ = (),
- 绑定值的模式
match 匹配的分支可以绑定到被匹配对象的部分值,因此可以从 enum
变体中提取值
示例
fn main() {
let five = Some(5);
plus_one(five);
let none: Option<i32> = None;
plus_one(none);
}
fn plus_one(x: Option<i32>) -> Option<i32> {
match x {
None => None,
Some(i) => Some(i+1),
}
}
if let
if let
只处理一种匹配,而忽略其它匹配的情况- 更少的代码、更少的缩进、更少的模代码
- 不考虑穷举
if let
是 match
一种匹配的缩写形式
示例:
fn main() {
let five = Some(5);
plus_one(five);
// if let
if let Some(5) = five {
println!("match 5.");
} else {
println!("none.")
}
}
fn plus_one(x: Option<i32>) {
match x {
Some(5) => println!("match 5."),
// _ => (),
_ => println!("none."),
}
}