18 模式与模式匹配
模式是Rust中的特殊语法,用来匹配类型中的结构,无论类型复杂与否。模式由以下一些内容组合而成:
字面值\解构的数组、枚举、元组或者结构体\变量\通配符\占位符,这些部分描述了我们需要处理的数据形状。(匹配模式其实可以理解为匹配项,简单理解就是把两个项目拉起来比较,看等不等于,等于的话我们就执行一些代码,不等于的话执行另一些代码。这个点就跟条件语句外加等于号一样,只不过Rust中把它专门做了个匹配模式)
18.2 Refutability(可反驳性):模式是否会匹配失效
模式有两种形式:可反驳的和不可反驳的(refutable & irrefutable)。不可反驳的模式能够匹配任何值,例如
let x = 5;
事实上x可以匹配任何值,所以不会失败,但是如下例子可能会匹配失败,所以是可反驳的
if let Some(x) = a_value
如果变量a_value中值是None而不是Some,那么Some(x)模式不能匹配
依照这个概念,函数、let 语句和for 循环只能接受不可反驳的模式,不然程序就是没有意义了
if let 和 while let 被限制为只接受可反驳的模式;因为它们可以处理匹配失败的情况
尝试在let 中使用可反驳模式
let Some(x) = some_option_value;
let Some(x) = so