先描述形状再处理内容

程序经常需要判断输入属于哪种情况,同时取出需要的部分。模式把这些要求写在一起,例如规定一项数据由两个元素组成,并为它们各取一个名字。匹配成功后,分支就能直接使用已经拆出的内容,不必先做一串检查,再在另一处重复拆解同一份数据。

参考:[1] [2]

常量、变量与嵌套结构

模式可以要求某个位置等于固定值,也可以让名字绑定到任意匹配内容;通配符则表示该处无需保留。较大的模式还可以嵌套较小模式,拆开元组、记录或枚举值。名称是用来比较既有值,还是创建新绑定,必须按具体语言判断,不能仅凭拼写猜测。

参考:[1] [2]

匹配次序与额外条件

多个分支可能同时适合一项输入,因而匹配次序会影响实际选择。守卫条件允许在结构检查之外加入判断,例如取出的数值必须大于某个界限。过早放置过于宽泛的模式,可能遮住后面的分支;把内容绑定出来,也不意味着它已经满足应用需要的全部合法性规则。

参考:[1] [2]

不同模式系统的边界

SNOBOL围绕字符串的识别与替换发展模式操作,现代语言也常对结构化数据做模式匹配。这些系统共享“按要求寻找符合形式”的思路,但允许的结构、回溯与绑定规则可以不同。Rust还将模式用于变量绑定和函数参数等位置;理解一个模式时,要同时看数据种类与使用场景。

参考:[1] [2]