Rust 的 match (匹配)表达式非常简单、易用。它基本上类似于 C 语言的 switch 语句简化版,允许用户根据变量的值,以及是否具有高级过滤功能作出判断。以下是一个使用 match
表达式的程序:
fn req_status() -> u32 {
200
}
fn main() {
let status = req_status();
match status {
200 => println!("Success"),
404 => println!("Not Found"),
other =>{
println!("Request failed with code:{}",other);
//从缓存中获取响应
}
}
}
在上述代码中有一个 req_status
函数,它返回一个伪超文本传输协议(HyperText Transfer,HTTP)请求状态码200,然后在main
函数中调用,并将它分配给变量 status
。
之后使用关键字match
匹配此值,关键字后面跟着的是要检查的变量(status),后面跟一对花括号。在花括号内,我们编写表达式—它们被称为匹配臂。这些匹配臂表示匹配的变量可以采用的候选值。
每个匹配臂式通过能写入变量的值来构造的,随后跟着的是一个”=>
“,然后右边是表达式时,需要用逗号进行分隔。此外,每个匹配臂必须返回相同的类型。在这种情况下,每个匹配臂返回一个Unit
类型()。
另一个很好的特性,或者可以称之为 match
表达式的保证,是我们必须对所有可能匹配的值进行彻底匹配。在本示例中,着将列出所有数字知道i32
类型允许的最大值。实际上这是不可能的。如果我们想要忽略相关的值,Rust 允许我们通过使用 catch all
变量(这里是 other
)或者_
(下划线)来忽略其余的可能性。当你有多个可能的值,并且需要简洁的进行构造时,match
表达式是围绕这些值作出决策的主要方式。与if else
表达式一样,match
表达式的返回值也可以在用分号分隔的 let
语句中为变量赋值,其中所有匹配臂的返回值类型相同。