当前位置: 首页 > news >正文

【Rust自学】6.4. 简单的控制流-if let

6.4 简单的控制流-if let

6.4.1. 什么是if let

if let语法允许把iflet组合成一种更简洁的方式,用来处理只匹配一种模式的值,同时忽略其余模式

可以把if let看作是match的语法糖,也就是只针对某一种特定模式来编写代码。

6.4.2.if let的实际应用

举个例子:v是一个u8变量。判断v是否为0,如果是就打印zero

use rand::Rng; // 使用外部 crate fn main(){ let v: u8 = rand::thread_rng().gen_range(0..=255); // 生成随机数 println!("{}", v); match v { 0 => println!("zero"), _ => (), } }

这里只需要区分0和非0。在这种情况下,使用if let会更简单:

use rand::Rng; // 使用外部 crate fn main(){ let v: u8 = rand::thread_rng().gen_range(0..=255); // 生成随机数 println!("{}", v); if let 0 = v { println!("zero"); }; }

注意:if let用的是=而不是==

小改一下上面的例子:v是一个u8变量。判断v是否为0;如果是就打印zero,否则打印not zero

use rand::Rng; // 使用外部 crate fn main(){ let v: u8 = rand::thread_rng().gen_range(0..=255); // 生成随机数 println!("{}", v); match v { 0 => println!("zero"), _ => println!("not zero"), } }

这种情况下,只需要给if let加上else分支即可:

use rand::Rng; // 使用外部 crate fn main(){ let v: u8 = rand::thread_rng().gen_range(0..=255); // 生成随机数 println!("{}", v); if let 0 = v { println!("zero"); } else { println!("not zero"); } }

6.4.3. 使用if let的取舍

match相比,if let代码更少、缩进更少、模板代码也更少。但if let放弃了穷尽性。

所以,使用if let还是match要根据实际需求来决定。这里存在简洁性与穷尽性之间的取舍

6.4.4.if letif的区别

很多初学者搞不清if letif的区别,因为好像if let能做的,if也能做。但它们本质上不同:if let是模式匹配,而if是条件语句。

if后面的条件只能是布尔值,而if let是匹配是否符合某个具体模式,适合从枚举、OptionResult或其他支持模式匹配的类型中提取值。

例如:

fn main(){ let x = Some(5); if let Some(value) = x { println!("Found a value: {}", value); } else { println!("No value found"); } }

if无法解包Option。要实现这样的效果,必须使用模式匹配(matchif let)。

http://www.jsqmd.com/news/1249453/

相关文章:

  • 小米路由器刷入Breed与OpenWrt详细流程并实现远程管理本地软路由
  • 济南上门回收手表靠谱吗?上门交易风险盘点 - 好物测评局
  • 2026淮南煤矿/电厂职工注意!国开大专采矿/电气自动化专业,助力职称评定! - 我叫小周
  • ARM架构下安装新版docker及docker-compose
  • 2026内蒙古中考落榜别灰心!电大中专保留学籍,曲线救国圆你大学梦! - 我叫小周
  • 宁波实体黄金回收店|大盘价当场结算 - 大牌深度测评
  • 2026高钙猫咪羊奶粉品牌实测横评:5维度实测,附避坑指南+选型方案
  • 大模型推理加速技术:ATB架构与优化实践
  • Nginx 负载均衡和反向代理
  • 深入解析MCU的IOMM:寄存器映射、引脚复用与错误处理实战
  • 2026 欧米茄海马闲置在家贬值?青岛合扬全城实体网点,评估完毕即刻回款! - 好物测评局
  • 每天节省2.7小时!AI自动发邮件的12种高价值场景(销售跟进、客户回访、内部通知全覆盖)
  • 2026年全国混凝土色差修复新标准:3步实现永久无痕
  • Django毕设选题推荐:基于 Django社区防疫数据监测与信息公示系统设计 面向社区的疫情人员信息登记管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年武汉东湖光电职业技术学校报考指南 - 湖北找学校
  • 2026年昆仑广州特约售后点位资料归档丨天河城写字楼维保服务中心区位一览 - 昆仑中国售后中心
  • 瑞士进口测表仪精准检测!石家庄合扬机芯状态一目了然 - 日常财经早知道
  • 【Rust自学】5.3. struct的方法(Method)
  • Django毕业设计-基于 Django 的物资仓储与配送管理系统设计与实现 智能物资配送调度管理平台的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 2026 年 7 月新发布:内蒙古可靠的古建牌楼工程制造商哪家专业,揭秘:牌楼的千年工艺,如何重塑现代都市面貌? - 行业甄选官
  • 深入解析C2000 eQEP模块:正交编码器硬件解码与高精度运动控制
  • WSL2配置tensorflow GPU环境
  • 为什么有的人偏爱 Mac?
  • GEO优化为什么不能只发软文?广拓时代谈AI搜索内容资产建设
  • 南京高端首饰回收哪家不坑?2026 新手出手品牌首饰防套路安全变现指南 - 全国二奢机构参考
  • 如何在OpenWrt软路由中增加一个新功能
  • 【办公类-54-03】20240828班级点名册模版(双休国定假涂成灰色)2024学年第一学期
  • 3D格式转换之CREO 转 CATIA 标准化转换技术
  • 2026年成都实力强香港留学机构推荐:五家优选深度解析 - 科技焦点
  • 想了解空气预热器等锅炉部件公司?这些不容错过!