Rust 的 match (匹配)表达式非常简单、易用。它基本上类似于 C 语言的 switch 语句简化版,允许用户根据变量的值,以及是否具有高级过滤功能作出判断。以下是一个使用 match表达式的程序:

    1. fn req_status() -> u32 {
    2. 200
    3. }
    4. fn main() {
    5. let status = req_status();
    6. match status {
    7. 200 => println!("Success"),
    8. 404 => println!("Not Found"),
    9. other =>{
    10. println!("Request failed with code:{}",other);
    11. //从缓存中获取响应
    12. }
    13. }
    14. }

    在上述代码中有一个 req_status函数,它返回一个伪超文本传输协议(HyperText Transfer,HTTP)请求状态码200,然后在main函数中调用,并将它分配给变量 status

    之后使用关键字match匹配此值,关键字后面跟着的是要检查的变量(status),后面跟一对花括号。在花括号内,我们编写表达式—它们被称为匹配臂。这些匹配臂表示匹配的变量可以采用的候选值。

    每个匹配臂式通过能写入变量的值来构造的,随后跟着的是一个”=>“,然后右边是表达式时,需要用逗号进行分隔。此外,每个匹配臂必须返回相同的类型。在这种情况下,每个匹配臂返回一个Unit类型()。

    另一个很好的特性,或者可以称之为 match 表达式的保证,是我们必须对所有可能匹配的值进行彻底匹配。在本示例中,着将列出所有数字知道i32类型允许的最大值。实际上这是不可能的。如果我们想要忽略相关的值,Rust 允许我们通过使用 catch all变量(这里是 other)或者_(下划线)来忽略其余的可能性。当你有多个可能的值,并且需要简洁的进行构造时,match表达式是围绕这些值作出决策的主要方式。与if else表达式一样,match表达式的返回值也可以在用分号分隔的 let语句中为变量赋值,其中所有匹配臂的返回值类型相同。