016、简单控制流if let

        if let 能让我们通过一种不那么烦琐的语法结合使用 if let,并处理那些只用关心某一种匹配而忽略其他匹配的情况。思考一下 示例6-6 中的程序,它会匹配一个 Option<u8> 的值,并只在值为 3 时执行代码。

// 示例6-6:这里的match只在值为Some(3)时执行特定的代码let some_u8_value = Some(0u8);
match some_u8_value {Some(3) => println!("three"),_ => (),
}

        我们想要对 Some(3) 的匹配执行某些操作,并忽略其他 Some<u8> None 值。为了满足 match 表达式穷尽性的需求,我们不得不在处理完这唯一的变体后额外加上一句 _ => (),这显得十分多余。

        不过,我们可以使用 if let 以一种更加简短的方式实现这段代码。下面的代码与 示例6-6 中的 match 拥有完全一致的行为: 

if let Some(3) = some_u8_value {println!("three");
}

        这里的 if let 语法使用一对以 = 隔开的模式与表达式。它们所起的作用与 match 中的完全相同,表达式对应 match 中的输入,而模式则对应第一个分支。

        使用 if let 意味着你可以编写更少的代码,使用更少的缩进,使用更少的模板代码。但是,你也放弃了 match 所附带的穷尽性检查。

        究竟应该使用 match 还是 if let 取决于你当时所处的环境,这是一个在代码简捷性与穷尽性检查之间取舍的过程。

        换句话说,你可以将 if let 视作 match 的语法糖。它只在值满足某一特定模式时运行代码,而忽略其他所有的可能性。

        我们还可以在 if let 中搭配使用 elseelse 所关联的代码块在 if let 语句中扮演的角色,就如同 match _ 模式所关联的代码块一样。

        还记得我们曾经在 示例6-4 中定义的 Coin 枚举吗?里面的 Quarter 变体包含了一个 UsState 值。

        假如我们想要在打印25美分硬币中的信息的同时,对处理过的所有非25美分的硬币进行计数,我们就可以像下面一样使用 match 表达式: 

let mut count = 0;
match coin {Coin::Quarter(state) => println!("State quarter from {:?}!", state),_ => count += 1,
}

        或者我们可以像下面这样使用 if letelse 表达式: 

let mut count = 0;
if let Coin::Quarter(state) = coin {println!("State quarter from {:?}!", state);
} else {count += 1;
}

        如果你在编写程序的过程中,觉得在某些情形下使用 match 会过分烦琐,要记得在Rust工具箱中还有 if let 的存在。 

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

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

相关文章

全网最全fiddler使用教程和fiddler如何抓包(fiddler手机抓包)-笔者亲测

一、前言 抓包工具有很多&#xff0c;比如常用的抓包工具Httpwatch&#xff0c;通用的强大的抓包工具Wireshark.为什么使用fiddler?原因如下&#xff1a; 1.Wireshark是通用的抓包工具&#xff0c;但是比较庞大&#xff0c;对于只需要抓取http请求的应用来说&#xff0c;似乎…

Linux操作系统基础(09):Linux的文件权限

1. 文件权限是什么 在Linux系统中&#xff0c;文件权限是指对文件或目录的访问权限控制&#xff0c;它由三个部分组成&#xff1a;所有者权限、组权限和其他用户权限。文件权限和用户权限之间有密切的关系&#xff0c;文件权限规定了用户对文件的操作权限&#xff0c;而用户权…

CSIG青年科学家会议圆满举行,合合信息打造智能文档处理融合研究新范式

近期&#xff0c;第十九届中国图象图形学学会青年科学家会议&#xff08;简称“会议”&#xff09;在广州召开。会议由中国图象图形学学会&#xff08;CSIG&#xff09;主办&#xff0c;琶洲实验室、华南理工大学、中山大学、中国图象图形学学会青年工作委员会承办。会议面向国…

基于入侵杂草算法优化的Elman神经网络数据预测 - 附代码

基于入侵杂草算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于入侵杂草算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于入侵杂草优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

APP端网络测试与弱网模拟!

当前APP网络环境比较复杂&#xff0c;网络制式有2G、3G、4G网络&#xff0c;还有越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异&#xff0c;都会对用户使用app造成一定影响。另外&#xff0c;当前app使用场景多变&#xff0c;如进地铁、上公交、进电梯等&#xff0c;使…

Ribbon客户端负载均衡

简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等…

【操作系统】输入/输出系统

目录 l/O系统的功能、模型和接口 l/O设备和设备控制器 中断和中断处理程序 设备驱动程序 与设备无关的I/O 用户层的I/O软件 缓冲区管理 磁盘性能概述和磁盘调度 l/O系统的功能、模型和接口 I/O系统管理 1&#xff09;主要对象&#xff1a; I/O设备和对应的设备控制器 …

IP代理测试:关于Ping测试你需要知道的一切干货

您在访问互联网时是否遇到过持续滞后或花费很长时间等待网站加载的情况&#xff1f;为了避免这种情况&#xff0c;您可以测试 ping 以查看连接速度。如果您使用代理&#xff0c;此 ping 测试还会显示代理服务器的响应速度。 ping 测试是一个很有价值的工具&#xff0c;可以帮助…

C++ 释放指针

在C中&#xff0c;释放指针通常使用delete或delete[]操作符&#xff1b; 如果指针指向的是单个对象&#xff0c;可以使用delete操作符进行释放&#xff1b; 在释放完内存后&#xff0c;最好将指针置为nullptr&#xff0c;以避免出现悬空指针&#xff08;dangling pointer&#…

浅谈指数移动平均(ema)

经常在各种代码中看到指数移动平均(比如我专注的网络传输领域)&#xff0c;但却不曾想到它就是诠释世界的方法&#xff0c;我们每个人都在被这种方式 “平均”… 今天说说指数移动平均(或移动指数平均&#xff0c;Exponential Moving Average)。 能查到的资料都侧重于其数学形…

且看迥然不同的 diff

文章目录 且看迥然不同的 diff语法默认比较两个文件并排显示方便比较context模式比较unified模式比较对比时忽略空格更多信息且看迥然不同的 diff Linux diff 命令用于比较文件的差异。 当然还有很多比较文件的专业工具,但是如果在Linux命令行,这个是最原始最初的,也是开机…

【Linux Shell】4. 数组

文章目录 【 1. 数组的定义 】【 2. 读取数组 】【 3. 关联数组 】3.1 关联数组的定义3.2 关联数组元素的调用 【 4. 获取数组中的所有元素 】【 5. 获取数组的长度 】 数组中可以存放多个值。 Bash Shell 只支持一维数组&#xff08;不支持多维数组&#xff09;&#xff0c;初…

算法训练第五十九天|503. 下一个更大元素 II、42. 接雨水

503. 下一个更大元素 II&#xff1a; 题目链接 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之…

AutoCAD 中镜像 操作

在 AutoCAD 中,镜像是一种常用的操作,可以在绘图过程中快速进行镜像对称。以下是 AutoCAD 中进行镜像操作的常用快捷键命令: 1. 镜像命令:MIRROR 或 MI - 输入 MIRROR 或 MI,然后按 Enter 键启动镜像命令。 2. 指定第一点:F 或 F+Enter - 输入 F 或 F+Enter,然后选择…

影响服务器正常使用的有哪些因素

对于网站优化来说&#xff0c;网站服务器的优化绝对是基础。不管是用户还是搜索引擎对于网站的打开速度都是没有太多耐心的&#xff0c; 所以网站优化的就是要保证网站服务器稳定&#xff0c;网站正常且快速的打开 1.用户体验较差 现在越来越强调用户体验&#xff0c;设想一…

imgaug库指南(五):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

游戏化教学在高校平台基础课程中的实践与学习体验提升

在高职计算机学院&#xff0c;无论计算机应用技术、软件技术、大数据应用技术还是人工智能应用等不同专业方向的学生&#xff0c;首先要接触和掌握一系列的基础平台课程。这些课程不仅包括政治、英语、数学等文化基础知识内容&#xff0c;更关键的是涉及网页设计基础、编程基础…

智慧校园全空间三维电子沙盘系统

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;采用大数据、云计算、虚拟现实、物联网、AI等先进技术&#xff0c;自主可控高性能WebGIS可视化引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和专题数据&#xff0c;提供地理信息数据、专题数据的并发…

MW Open - 高效率的API接口管理工具

本文将会详细介绍 MW Open&#xff0c;一个高效率的 API 接口管理工具&#xff0c;并提供相关代码示例。 一、简介 MW Open 是一款开源的 API 接口管理工具&#xff0c;支持管理 API 接口、测试 API 接口、生成 API 文档等功能。MW Open 拥有简洁明了的接口管理界面&#xff…

对象克隆学习

假如说你想复制一个简单变量。很简单&#xff1a; int apples 5; int pears apples; 不仅仅是int类型&#xff0c;其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个对象&#xff0c;情况就有些复杂了。 …