60_模式匹配可辩驳性和基本语法

1. 概述

模式的两种形式包括:可辩驳的(可反驳的或可失败的)、无可辩驳的(不可反驳的或不可失败的)。

能够匹配任何可能传递的值的模式是无可辩驳的,即不能失败,怎么匹配都会成功。

  • 例如let x = 5不可能失败,它能匹配所有表达式右侧的值。

对于某些可能的值,无法进行匹配的模式,就是可辩驳的。

  • 例如if let Some(x) = a_value,如果右边的值是null,这时候就会发生不匹配的情况,这就是可辩驳的,或者可失败的。

其中,函数参数、let语句、for循环只接受无可辩驳的模式。if letwhile let接受可辩驳和无可辩驳的模式。在接受无可辩驳模式的时候编译器可能会发生警告,因为存在可能的失败。

如下例子:

rust 复制代码
fn main() {
    let a: Option<i32> = Some(5);
    // Some是个可辩驳的
    let Some(x) = a;
}

a是Option类型,而Some是一个可辩驳的,以上代码将会编译错误,可以修改为如下代码

rust 复制代码
fn main() {
    let a: Option<i32> = Some(5);
    if let Some(x) = a {

    }
}

但是如果我们改为不可辩驳的模式,如下

rust 复制代码
fn main() {
    let a: Option<i32> = Some(5);
    if let x = 5 {}
}

代码不会报错,但是x = 5总是匹配成功的,所以使用一个可辩驳的模式没有任何意义。结合上面的示例,我们可以想到match表达除了最后一个分支的所有分支必须是可辩驳的(即可失败的),而最后一个分支因为是不可辩驳的,因为它需要匹配所有剩余的情况。

相关推荐
颜进强1 分钟前
LanceDB 基础使用:用 TypeScript 完成第一次向量检索
前端·后端·ai编程
xyphf_和派孔明3 分钟前
企业级微前端项目完整创建步骤,第二步:配置主应用
前端
默_笙8 分钟前
🔑 让 AI 学会"读"网页:我用 Cheerio 爬了一篇掘金文章,然后切成小块存进了向量库
前端·javascript
颜进强9 分钟前
Ollama 从入门到实践:本地模型运行、API 调用
前端·后端·ai编程
颜进强13 分钟前
Embedding 基础使用:用 Ollama 和 LangChain.js 生成文本向量
前端·后端·ai编程
颜进强17 分钟前
Vector Store 入门:什么是向量数据库,主流产品如何选择
前端·后端·ai编程
方方洛37 分钟前
AI 教程系列-TUI 应用开发教程14-技能系统与可扩展性
前端·javascript·typescript
方方洛41 分钟前
AI 教程系列-TUI 应用开发教程05-大模型对话界面设计
前端·javascript·typescript
方方洛1 小时前
AI 教程系列-TUI 应用开发教程08-流式响应与动画
前端·javascript·typescript
方方洛1 小时前
AI 教程系列-TUI 应用开发教程04-第一个 TUI 应用
前端·javascript·typescript