5 分钟速读之 Rust 权威指南(三十七)模式性质
模式匹配的可失败性质
上一节中我们学到了哪些位置可以使用模式匹配,本节我们看来一下匹配的两种分类:不可失败(irrefutable)和可失败(refutable)两种类型
不可失败
下面代码中的 x 便是不可失败模式:
复制代码
函数参数、let
语句及for
循环也只接收不可失败模式,在这些场合下,我们的程序在值不匹配时的后续操作都是没有意义的。
不可失败的场合使用可失败的匹配
因为对于 rust 的安全性来说,不允许出现覆盖不到的情况,如果下面 x 匹配失败,后续代码会没有意义例如下面的代码:
复制代码
let
语句只能接收一个不可失败模式,然而上面右侧的值None
,这段代码无法通过None
值执行任何有效的操作。rust 会在编译时报错,也就是说该代码需要使用可失败模式。
可失败
if let
语句用于可失败的匹配,为匹配的代码找到了出口,使用else
分支处理不匹配的情况,或者干脆忽略不处理:
复制代码
if let
和while let
表达式则只接收可失败模式,因为它们在失败是允许做其他的操作。
可失败的场合使用不可失败的匹配
再来,我们在if let
语句后面使用不可失败的匹配的话,看看会有什么情况发生:
复制代码
虽然可以编译通过,但是编译器还是会报提醒,左边的模式是不可失败的。
match 表达式
在match
表达式的匹配分支中,最后一个允许使用不可失败模式的匹配,其他的必须全部使用可失败模式,由于match
需要覆盖所有情况,最后一个分支需要匹配值的所有剩余的情形,这里就不再举例了,大家可以手动去尝试下。
关注「码生笔谈」公众号,阅读更多最新章节
版权声明: 本文为 InfoQ 作者【码生笔谈】的原创文章。
原文链接:【http://xie.infoq.cn/article/381178adbeb938e1354c6407f】。文章转载请联系作者。
评论