简介
在 Rust 中,match
是一种控制流运算符,它通过将一个值与一系列的模式进行比较来工作。这使得 match
非常强大且灵活,可以用于许多场景,包括但不限于条件语句和枚举。
基本语法
一个基本的 match
表达式有两个主要部分:首先是一个待匹配的值,然后是一系列的分支(arms),每个分支都包含一个模式和对应的代码块。语法如下所示:
match value {
pattern1 => expression1,
pattern2 => expression2,
...
}
当 value
与某个分支的 pattern
匹配时,就会执行对应的 expression
。
匹配字面量
你可以使用 match
来匹配字面量:
let x = 1;
match x {
1 => println!("one"),
2 => println!("two"),
_ => println!("other"),
}
在这个例子中,由于 x
的值是 1
,所以会打印出 "one"。
匹配枚举类型
match
表达式可以用来解构枚举类型:
enum Color {
Red,
Green,
Blue,
}
let color = Color::Blue;
match color {
Color::Red => println!("red"),
Color::Green => println!("green"),
Color::Blue => println!("blue"),
}
在这个例子中,由于 color
的值是 Color::Blue
,所以会打印出 "blue"。
匹配元组和数组切片
你也可以使用 match
来解构元组和数组切片:
let pair = (0, -2);
match pair {
(0, y) => println!("x is 0 and y is {}", y),
(x, 0) => println!("y is 0 and x is {}", x),
_ => println!("No zero was found"),
}
在这个例子中,会打印出 "y is 0 and x is 0"。
匹配结构体
你可以使用 match
来解构结构体:
struct Point {
x: i32,
y: i32,
}
let p = Point { x: 0, y: 7 };
match p {
Point { x, y: 0 } => println!("On the x axis at {}", x),
Point { x: 0, y } => println!("On the y axis at {}", y),
Point { x, y } => println!("On neither axis: ({}, {})", x, y),
}
在这个例子中,会打印出 "On the x axis at 0"。
匹配守卫
你可以使用匹配守卫来增加额外的条件:
let num = Some(4);
match num {
Some(x) if x < 5 => println!("less than five: {}", x),
Some(x) => println!("{}", x),
None => (),
}
在这个例子中,会打印出 "less than five: 4"。
总结
Rust 的 match
表达式是一种强大的控制流运算符,它允许你将一个值与一系列的模式进行比较,从而执行相应的代码块。这使得 match
非常灵活且适用于多种场景。