// 定义TrafficLight枚举类型
enum TrafficLight {
Red,
Yellow,
Green,
}
fn main() {
// 假设这里有一个TrafficLight实例
let light = TrafficLight::Red;
// 使用match表达式
match light {
TrafficLight::Red => println!("停止"),
TrafficLight::Yellow => println!("准备"),
TrafficLight::Green => println!("通行"),
}
}
match
表达式的模式匹配规则
- 穷尽性:
match
表达式必须涵盖枚举类型的所有可能变体。在上述例子中,TrafficLight
有Red
、Yellow
、Green
三个变体,match
表达式中必须对这三个变体都进行匹配,否则编译会报错。这确保了程序在运行时不会因为未处理的变体而导致未定义行为。
- 顺序性:
match
表达式从上到下依次匹配模式。一旦找到一个匹配的模式,就会执行与之关联的代码块,并且不会再继续匹配后续的模式。例如,如果先匹配到TrafficLight::Red
,就会执行println!("停止")
,而不会再检查Yellow
和Green
的模式。
- 精确匹配:模式必须与被匹配的值精确匹配。在枚举类型的情况下,模式必须是枚举的某个具体变体。例如,
TrafficLight::Red
就是精确匹配TrafficLight
枚举中的Red
变体。