【Rust】19. 模式与模式匹配

news2024/12/28 3:25:13

在这里插入图片描述

19.1 所有可能会用到模式的位置

19.1.1 match 分支

在这里插入图片描述

19.1.2 if let 条件表达式

  • 可以组合并匹配 if letelse ifelse if let 表达式,优势在于可以将多个值与模式比较match 表达式一次只能将一个值与模式比较),且各个分支并不要求其条件相互关联
  • if let 也可以像 match 分支那样引入覆盖变量
  • if let 表达式的缺点在于其穷尽性没有为编译器所检查(不保证覆盖的完备性),而 match 表达式则检查了(保证覆盖的完备性)

在这里插入图片描述

19.1.3 while let 条件循环

在这里插入图片描述

19.1.4 for 循环

  • for 可以获取一个模式:模式是 for 关键字直接跟随的值,正如 for x in y 中的 x

在这里插入图片描述

19.1.5 let 语句

  • 如果希望忽略元组中一个或多个值,也可以使用 _..

在这里插入图片描述

19.1.6 函数参数

在这里插入图片描述

19.2 Refutability(可反驳性): 模式是否会匹配失效

  • 不可反驳的(irrefutable):能匹配任何传递的可能值的模式
  • 可反驳的(refutable):对某些可能的值进行匹配会失败的模式
  • 在不可反驳模式的地方使用可反驳模式通常是意义不大的
  • 例子:match 匹配分支必须使用可反驳模式,除了最后一个分支需要使用能匹配任何剩余值的不可反驳模式(其实也可以在只有一个匹配分支的 match 中使用不可反驳模式,不过这么做不是特别有用,并可以被更简单的 let 语句替代)

在这里插入图片描述
在这里插入图片描述

19.3 所有的模式语法

19.3.1 匹配字面值

在这里插入图片描述

19.3.2 匹配命名变量

  • 变量覆盖问题:存在外部变量的,则会优先使用外部变量;在新作用域中的新变量(会忽略外部的同名变量)会匹配任何 Some 中的值!

在这里插入图片描述

19.3.3 match 中的多个模式(|)

  • match 表达式中,可以使用 | 语法匹配多个模式,它代表 或(or)的意思

在这里插入图片描述

19.3.4 通过 ..= 匹配值的范围

  • ..= 语法允许你匹配一个闭区间范围内的值,但仅适用于数字char(仅这两种类型可以判断范围是否为空的类型)

在这里插入图片描述

19.3.5 解构并分解值(一):解构结构体

  • 匹配结构体字段的简写模式(1):只需列出结构体字段的名称,则模式创建的变量会有相同的名称
  • 匹配结构体字段的简写模式(2):也可以使用字面值作为结构体模式的一部分进行解构,而不是为所有的字段创建变量(这允许我们测试一些字段是特定值,同时会创建其他字段的变量

在这里插入图片描述
在这里插入图片描述

19.3.6 解构并分解值(二):解构枚举

在这里插入图片描述

19.3.7 解构并分解值(三):解构嵌套的结构体和枚举

在这里插入图片描述

19.3.8 解构并分解值(四):解构结构体和元组

在这里插入图片描述

19.3.9 忽略模式中的值(一):使用 _ 忽略整个值

  • _:作为匹配但不绑定任何值的通配符模式,可以将其用于任意模式。通常作为 match 表达式最后的分支,也可以用作函数参数

在这里插入图片描述

19.3.10 忽略模式中的值(二):使用嵌套的 _ 忽略部分值

  • 可以在一个模式内部使用 _ 忽略部分值
  • 可以在一个模式中的多处使用 _ 来忽略特定值

在这里插入图片描述

19.3.11 忽略模式中的值(三):通过在名字前以一个下划线开头来忽略未使用的变量

  • 告诉 Rust 不要警告未使用的变量:可以用下划线作为变量名的开头(比如:_x
  • 注意:下划线开头的变量 _x 仍会将值绑定到变量,而 _ 则完全不会绑定

在这里插入图片描述

19.3.12 忽略模式中的值(四):用 … 忽略剩余值

  • .. 模式会忽略模式中剩余的任何没有显式匹配的值部分,必须是无歧义

在这里插入图片描述

19.3.13 匹配守卫提供的额外条件

  • 匹配守卫(match guard)是一个指定于 match 分支模式之后的额外 if 条件,它也必须被满足才能选择此分支;匹配守卫用于表达比单独的模式所能允许的更为复杂的情况(需要同时满足更多条件
  • 匹配守卫可以解决模式中变量覆盖的问题

在这里插入图片描述
在这里插入图片描述

19.3.14 @ 绑定

  • @ 运算符:允许在创建一个存放值的变量的同时测试其值是否匹配模式,也即先进行匹配测试,若通过则保存变量值到一个新建的变量中

在这里插入图片描述

19.4 小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[NOI Online 2022 入门组] 王国比赛

题目背景: 经过管理员的考虑,我们打算将民间数据单独存放在最后一个 Subtask 中。这些测试点分数均为 0 分,但是没有通过其中的任何测试点将会视为此题不通过。 民间数据提供者:一扶苏一。 题目描述: 智慧之王 Kri …

C++八数码程序图形化界面[2023-02-02]

C八数码程序图形化界面[2023-02-02] 问题简介 八数码:是指在3x3的矩阵中,其中有8个格子放置成1-8,剩下一个格子是空格。能够移动和空格相邻的格子到空格,直到这个矩阵满足每一行依次从左到右读取是有序,得到最后得到1…

爱普生LQ-610K针式打印机不通电维修

基本参数: 爱普生LQ-610K是一台针式打印机,不支持网络打印,A4幅面,不支持自动双面打印。 品牌:爱普生Epson 型号:LQ-610K 颜色:灰色 类型:针式打印机 幅面:A4幅面 针数:24针 打印速度:中文(6.7cpi)150汉字/秒 100汉字/秒 (7.5cpi)168汉字/秒 112汉字/秒5…

【整理分享】一些常见Vue面试题(附答案解析)

本次给大家分享一些关于Vue的常见面试题,带你梳理基础知识,增强Vue知识储备,值得收藏,快来看看吧! Vue 常见面试题总结 MVVM模型? MVVM,是Model-View-ViewModel的简写,其本质是MVC…

【Git笔记】GitHub创建远程库,推送到远程库,拉取到本地库与克隆到本地库

目录 创建 GitHub 远程库 创建远程库别名 推送本地库到远程库 拉取远程库到本地库 克隆远程库到本地库 创建 GitHub 远程库 点击 New repository Repository name 名字与工作区名称最好一致 Public 就是开源,Private 就是私有,不公开 其它的保持…

阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了

说在前面 在尼恩指导了几百个小伙伴的面试,在这些过程中, 非常、非常高频的一个面试题: 千万级数据,如何做性能优化? 亿级数据,如何做性能优化? 最近,有个小伙伴阿里二面&#xff0…

袁树雄有《早安隆回》,杨语莲有《汉川》,后者嫁给前者真是绝配

随着《早安隆回》的火爆,创作者袁树雄也收获颇丰,不但各种商演邀约不断,还坐到了春晚的观众席上。 、虽然对于袁树雄来说,他能够坐到观众席上面,就已经是一生的荣幸了,但是央视春晚纂改歌词,总是…

python time模块和datetime模块详解

一、time模块 time模块中时间表现的格式主要有三种: a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b、struct_time时间元组,共有九个元素组。 c、format time 格式化时间,已格式化的结构使时间更…

【生产者消费者模型】

Linux生产者消费者模型生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型生产者消费者模型 生产者消费者模型的概念 生产者消费者模式…

剑指 Offer 第19天 二叉树的公共祖先

目录 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 剑指 Offer 68 - II. 二叉树的最近公共祖先 a 小部件 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表…

基于 JMeter 完成 Dubbo 接口的测试

JMeter 默认是不支持 Dubbo 接口测试的,但是我们可以通过拓展的插件或 jar 包实现此功能。 JMeter 插件拓展 1.1 插件下载 测试 Dubbo,我们需要下载 Dubbo 的插件,在 Apache 的 Dubbo 插件 GitHub 中可以找到: https://github…

DDR调试不通?先别扔,这个操作可能帮你逆袭!

作者:一博科技高速先生成员 黄刚相信大家过完一个美美的春节后,学习的热情一定会暴涨,反正高速先生给大家分享技术文章的热情是非常高涨的哈!打从推出这个系列的仿真和理论相结合的话题后,文章受到了很多忠实粉丝的喜爱…

ThinkPHP6 获取上传文件属性及自定义文件验证及上传处理

TP^6.1文件上传有封装方法,如果不想用封装的,自定义上传怎么获取文件属性呢 目录 TP文件信息 打印上传文件信息 获取文件属性方法 1.获取文件大小(单位bytes) 2.获取文件后缀 3.获取文件上传路径 4.获取文件名称 5.上传文…

XSS Challenges通关教程

11.XSS Challenges通关教程 Stage#1 直接在search 输入框中输入payload&#xff1a; <script>alert(document.domain)</script> 点击search就XSS攻击成功了。 Stage #2 尝试直接输入<script>alert(document.domain)</script>&#xff0c;发现并未…

【2005NOIP普及组】T4.循环 代码解析

【2005NOIP普及组】T4.循环 代码解析 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。 众所周知,2的正整数次幂最后一位数总是不断的在重复2,4,8,6,2,…

使用PyTorch构建卷积神经网络(CNN)源码(详细步骤讲解+注释版) 01 手写数字识别

1 卷积神经网络&#xff08;CNN&#xff09;简介 在使用PyTorch构建GAN生成对抗网络一文中&#xff0c;我们使用GAN构建了一个可以生成人脸图像的模型。但尽管是较为简单的模型&#xff0c;仍占用了1G左右的GPU内存&#xff0c;因此需要探索更加节约资源的方式。 卷积神经网络…

vue 文件.env.production、.env.development简析

静下来 慢慢看 首先 我们需要搭建一个项目 依赖包会自动下载好 无需自己 npm i .env 无论什么环境都会加载 .env.production 生产环境加载 .env.development 测试开发环境加载 我们下面的例子分开来写 只用 .env.production .env.development 在项目根目录新建两个文件 分别…

Git和SVN

一&#xff1a;两者的区别 ——Git是分布式版本控制系统&#xff0c;SVN是集中式版本控制系统 ——集中式版本控制系统 早期出现的版本控制系统有&#xff1a;SVN、CVS等&#xff0c;它们是集中式版本控制系统&#xff0c;集中式版本控制系统有一个单一的集中管理的服务器&…

【微服务】分布式搜索引擎elasticsearch(2)

分布式搜索引擎elasticsearch&#xff08;2&#xff09;1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.示例1.2.4.总结1.3.精准查询1.3.1.term查询1.3.2.range查询1.3.3.总结1.4.地理坐标查询1.4.1.矩形范围查询1.4.2.附近查询1.5.复合查询1…

Power BI饼图

饼图展现的是个体占总体的比例&#xff0c;利用扇面的角度来展示比例大小。 在PowerBI默认的可视化对象中当然也有这种标准饼图&#xff0c;通过点击拖拽轻松生成&#xff0c; 通过对标题和图例的格式稍加设置&#xff0c;一个简单而不失专业的饼图就可以用了&#xff0c; 饼…