开发环境
- Windows 10
- Rust 1.59.0
- VS Code 1.65.2
项目工程
这里继续沿用上次工程rust-demo
控制流程结构 - match
Rust有一个非常强大的控制流构造,称为match,它允许您将一个值与一系列模式进行比较,然后根据匹配的模式执行代码。模式可以由文字值、变量名、通配符和许多其他东西组成;后面涵盖了所有不同种类的模式以及它们的作用。match的强大之处在于模式的表现力,以及编译器确认所有可能的情况都被处理的事实。
把一个match表达式想象成一个硬币分拣机:硬币沿着一条轨道滑下,轨道上有不同大小的洞,每个硬币通过它遇到的第一个洞落入。以同样的方式,值通过match中的每个模式,在第一个模式中,值“适合”,该值落入在执行期间使用的相关代码块中。说到硬币,我们就以使用match为例吧!我们可以编写一个函数,用一种类似于计数机的方法,获取一枚未知的美国硬币,确定它是哪一枚硬币,并返回它的美分值,如下所示:
// 枚举
enum Coin {
Penny,
Nickel,
Dime,
Quarter,
}
// 函数
fn value_in_cents(coin: Coin) -> u8 {
// match使用
match coin {
Coin::Penny => 1,
Coin::Nickel => 5,
Coin::Dime => 10,
Coin::Quarter => 25,
}
}
让我们在value_in_cents函数中分解match。首先,我们列出match关键字,后跟一个表达式,在本例中是值coin。这似乎与if使用的表达式非常相似,但有一个很大的区别:使用if,表达式需要返回一个布尔值,但在这里,它可以返回任何类型。这个例子中的coin类型是我们在第一行定义的硬Coin枚举。
接下来是match体。有两个部分:一个模式和一些代码。这里的第一个分支有一个模式,它是值Coin::Penny,然后是=>操作符,它将模式和要运行的代码分开。这种情况下的代码只是值1。每条分支都用逗号隔开。
当