当前位置: 首页>后端>正文

rust学习-3.2-控制语句-模式匹配

模式匹配是Rust语言中一个非常核心的特性,它允许你将值与一系列模式进行比较,并根据模式来执行不同的代码块。Rust中的模式匹配通常与 match 表达式一起使用。

match 表达式

match 表达式是Rust中最常见的模式匹配形式。它将一个值与一系列的模式进行比较,并为每个模式执行相应的代码块。match 表达式的一般形式如下:

match value {
    pattern1 => expression1,
    pattern2 => expression2,
    // ...
    _ => default_expression,
}
  • value 是要匹配的值。
  • pattern1, pattern2, ... 是要与之比较的模式。
  • expression1, expression2, ... 是当模式匹配时执行的表达式。
  • _是一个特殊的模式,它匹配任何值。它类似于其他语言中switch语句的default` 分支。

在Rust中,基础类型的模式匹配通常涉及字面量模式、变量模式和通配符模式。

字面量模式

字面量模式直接匹配一个具体的值。

fn main() {
    let number = 42;
    match number {
        1 => println!("One"),
        42 => println!("The answer to life, the universe, and everything"),
        _ => println!("Some other number"),
    }
}

在这个例子中,match 表达式会检查 number 变量是否等于 142。如果都不匹配,则执行通配符模式 _ 对应的分支。

变量模式

变量模式将匹配的值绑定到一个变量。

fn main() {
    let number = 7;
    match number {
        x => println!("The number is {}", x),
    }
}

这里,无论 number 的值是什么,都会匹配到变量模式 x,并将其绑定到 number 的值。然后打印出来。

通配符模式

通配符模式 _ 匹配任何值,通常用于忽略不关心的值。

fn main() {
    let number = 7;
    match number {
        _ => println!("I don't care about the number"),
    }
}

在这个例子中,无论 number 的值是什么,都会匹配到通配符模式,并执行相应的分支。

范围模式

范围模式(range pattern)是模式匹配中的一种特殊类型,它允许你匹配一个落在特定范围内的值。
范围模式通常用于匹配整数或字符类型的值。当你想要根据一个值是否在某个连续的范围内来执行不同的逻辑时,范围模式特别有用。
这里有一个简单的例子,展示了如何使用范围模式来匹配一个整数值:

fn main() {
    let num = 5;
    match num {
        1..=5 => println!("The number is between 1 and 5"),
        _ => println!("The number is outside the range"),
    }
}

在这个例子中,如果num的值在1到5之间(包括1和5),则第一个模式1..=5会匹配,并打印出相应的信息。如果num的值不在这个范围内,则会匹配到_模式,这是一个通配符模式,它匹配任何值。
范围模式也可以用于if let语句,使得代码更加简洁:

fn main() {
    let num = 3;
    if let 1..=5 = num {
        println!("The number is between 1 and 5");
    } else {
        println!("The number is outside the range");
    }
}

在这个例子中,如果num的值在1到5之间,则if let语句的条件为真,并执行第一个分支的代码。

结合使用

你也可以在 match 表达式中结合使用这些模式。

fn main() {
    let number = 10;
    match number {
        1 => println!("One"),
        2 | 3 | 5 | 7 => println!("This is a prime"),
        10..=20 => println!("Between 10 and 20"),
        _ => println!("Some other number"),
    }
}

在这个例子中,我们使用了字面量模式、或模式(| 运算符)和范围模式(..=)。如果 number1020 之间的任何数,包括 1020,它会匹配第三个分支。
通过这些基础类型的模式匹配,你可以看到Rust中的 match 表达式是多么的灵活和强大。即使是在处理简单的值时,它也能提供清晰和表达力强的代码。

练习题

将if-else练习题改成match实现。


https://www.xamrdz.com/backend/34x1930578.html

相关文章: