# match 控制流构造

Rust 有一个非常强大的控制流构造,称为 match,它允许你将一个值与一系列模式进行比较,然后根据模式匹配执行代码。模式可以由文字值、变量名、通配符和许多其他内容组成;第 18 章介绍了所有不同类型的模式及其作用。match 的强大之处在于模式的表达能力以及编译器确认所有可能的情况都得到处理的事实。

可以将匹配表达式想象成一台硬币分类机:硬币沿着轨道滑下,轨道上有各种大小的孔,每枚硬币都会从它遇到的第一个适合它的孔中掉落。同样,值也会在匹配中经历每个模式,在值“适合”的第一个模式中,该值会落入关联的代码块中,以便在执行期间使用。

说到硬币,让我们用 match 来举例!我们可以编写一个函数,接受一个未知的美国硬币,并以与计数机类似的方式确定它是哪种硬币并返回其价值(以美分为单位),如示例 6-3 所示。

enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

fn value_in_cents(coin: Coin) -> u8 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}

示例 6-3:一个枚举和一个以枚举的变体作为模式的匹配表达式