Rust模式语法全面解析
Rust 的模式匹配是一种强大且灵活的逻辑控制机制,常用于控制流、解构、条件匹配等场景。模式可用于 match
表达式、if let
、while let
、函数参数、let
语句等。下面是 Rust 模式语法的全面解析:
1. 基础模式
1.1. 字面量模式
字面量模式用于匹配具体的数值和字符串。
match x {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Other"),
}
1.2. 变量模式
通过将值绑定到变量来使用。
let x = Some(5);
match x {
Some(y) => println!("Value is: {}", y),
None => println!("No value"),
}
2. 解构模式
2.1. 结构体解构
结构体模式可以匹配并解构结构体。
struct Point {
x: i32,
y: i32,
}
let point = Point { x: 0, y: 7 };
match point {
Point { x: 0, y } => println!("On the y-axis at {}", y),
Point { x, y: 0 } => println!("On the x-axis at {}", x),
Point { x, y } => println!("On neither axis: ({}, {})", x, y),
}
2.2. 元组解构
元组模式匹配和解构元组。
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!("Neither are 0"),
}
2.3. 枚举解构
用于枚举成员的解构。
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
let msg = Message::Move { x: 10, y: 20 };
match msg {
Message::Quit => println!("The Quit variant"),
Message::Move { x, y } => println!("Move in the x: {}, y: {} direction", x, y),
Message::Write(text) => println!("Text: {}", text),
Message::ChangeColor(r, g, b) => {
println!("Change color to red: {}, green: {}, blue: {}", r, g, b)
}
}
3. 模式中的特殊语法
3.1. 使用 _
忽略值
在模式匹配时,使用 _
忽略不关心的值。
let some_option: Option<i32> = None;
match some_option {
Some(_) => println!("There is a value"),
None => println!("No value"),
}
3.2. 范围模式
用于数值范围匹配。
let num = 7;
match num {
1..=5 => println!("One through Five"),
_ => println!("Something else"),
}
4. 结合条件判断的模式
4.1. 绑定变量并使用守卫
使用守卫来增加条件。
let num = Some(4);
match num {
Some(n) if n < 5 => println!("Number is less than five: {}", n),
Some(n) => println!("Number is: {}", n),
None => println!("No number"),
}
5. 复杂模式
5.1. 嵌套模式
可以嵌套其他模式。
let msg = Message::ChangeColor(0, 160, 255);
match msg {
Message::ChangeColor(r @ 0..=100, g, b) => println!("R in range; r={}, g={}, b={}", r, g, b),
_ => println!("Other message or out of range color"),
}
Rust 的模式匹配为我们提供了灵活且强大的手段,可以清晰、简洁地表达复杂的控制流逻辑。熟悉这些模式是写出优雅 Rust 代码的基础。