提示信息

Rust模式语法全面解析

分心 已关注

Rust 的模式匹配是一种强大且灵活的逻辑控制机制,常用于控制流、解构、条件匹配等场景。模式可用于 match 表达式、if letwhile let、函数参数、let 语句等。下面是 Rust 模式语法的全面解析:

1. 基础模式

1.1. 字面量模式

字面量模式用于匹配具体的数值和字符串。

  1. match x {
  2. 1 => println!("One"),
  3. 2 => println!("Two"),
  4. _ => println!("Other"),
  5. }

1.2. 变量模式

通过将值绑定到变量来使用。

  1. let x = Some(5);
  2. match x {
  3. Some(y) => println!("Value is: {}", y),
  4. None => println!("No value"),
  5. }

2. 解构模式

2.1. 结构体解构

结构体模式可以匹配并解构结构体。

  1. struct Point {
  2. x: i32,
  3. y: i32,
  4. }
  5. let point = Point { x: 0, y: 7 };
  6. match point {
  7. Point { x: 0, y } => println!("On the y-axis at {}", y),
  8. Point { x, y: 0 } => println!("On the x-axis at {}", x),
  9. Point { x, y } => println!("On neither axis: ({}, {})", x, y),
  10. }

2.2. 元组解构

元组模式匹配和解构元组。

  1. let pair = (0, -2);
  2. match pair {
  3. (0, y) => println!("x is 0 and y is {}", y),
  4. (x, 0) => println!("y is 0 and x is {}", x),
  5. _ => println!("Neither are 0"),
  6. }

2.3. 枚举解构

用于枚举成员的解构。

  1. enum Message {
  2. Quit,
  3. Move { x: i32, y: i32 },
  4. Write(String),
  5. ChangeColor(i32, i32, i32),
  6. }
  7. let msg = Message::Move { x: 10, y: 20 };
  8. match msg {
  9. Message::Quit => println!("The Quit variant"),
  10. Message::Move { x, y } => println!("Move in the x: {}, y: {} direction", x, y),
  11. Message::Write(text) => println!("Text: {}", text),
  12. Message::ChangeColor(r, g, b) => {
  13. println!("Change color to red: {}, green: {}, blue: {}", r, g, b)
  14. }
  15. }

3. 模式中的特殊语法

3.1. 使用 _ 忽略值

在模式匹配时,使用 _ 忽略不关心的值。

  1. let some_option: Option<i32> = None;
  2. match some_option {
  3. Some(_) => println!("There is a value"),
  4. None => println!("No value"),
  5. }

3.2. 范围模式

用于数值范围匹配。

  1. let num = 7;
  2. match num {
  3. 1..=5 => println!("One through Five"),
  4. _ => println!("Something else"),
  5. }

4. 结合条件判断的模式

4.1. 绑定变量并使用守卫

使用守卫来增加条件。

  1. let num = Some(4);
  2. match num {
  3. Some(n) if n < 5 => println!("Number is less than five: {}", n),
  4. Some(n) => println!("Number is: {}", n),
  5. None => println!("No number"),
  6. }

5. 复杂模式

5.1. 嵌套模式

可以嵌套其他模式。

  1. let msg = Message::ChangeColor(0, 160, 255);
  2. match msg {
  3. Message::ChangeColor(r @ 0..=100, g, b) => println!("R in range; r={}, g={}, b={}", r, g, b),
  4. _ => println!("Other message or out of range color"),
  5. }

Rust 的模式匹配为我们提供了灵活且强大的手段,可以清晰、简洁地表达复杂的控制流逻辑。熟悉这些模式是写出优雅 Rust 代码的基础。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
分心 关注 已关注

最近一次登录:2024-11-20 12:37:42   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图