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

embedded/2024/12/28 7:55:05/

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)

6.4.1. 什么是if let

if let语法允许将iflet组合成一种不太冗长的方式来处理与一种模式匹配的值,同时忽略其余模式

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

6.4.2. if let的应用

举个例子:v是一个u8类型的变量,判断v是否是0,是0就打印zero

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

这里只用分辨0和非0两种情况,在这种情况下使用if let就会更简单:

rust">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,是0就打印zero,不是就打印not zero

rust">use rand::Rng;  // 使用外部库
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就行:

rust">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的取舍

if let相比match有更少的代码,更少的缩进和更少的模版代码。但if let放弃了穷举的可能。

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

6.4.5. if let 与 if 的区别

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

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

如例:

rust">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.ppmy.cn/embedded/149393.html

相关文章

【大数据毕设】基于机器学习的信用卡反欺诈系统设计与实现

代码大同小异,存档自留。下述代码均是构建一个信用卡反欺诈预测模型 代码参考 数据挖掘-11-利用python进行信用卡欺诈检测(包含数据代码) 机器学习项目实战之信用卡欺诈检测 python之逻辑回归项目实战——信用卡欺诈检测 机器学习实战分享…

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集I-FGSSM介绍I-FGSSM代码实现I-FGSSM算法实现攻击效果 代码汇总ifgssm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch…

移动 APP 设计规范参考

一、界面设计规范 布局原则: 内容优先:以内容为核心进行布局,突出用户需要的信息,简化页面导航,提升屏幕空间利用率.一致性:保持界面元素风格一致,包括颜色、字体、图标等,使用户在…

linux笔记

VMnet0表示的是用于Bridged模式下的虚拟交换机。 VMnet1表示的是用于Host-Only模式下的虚拟交换机。 VMnet8表示的是用于NAT模式下的虚拟交换机。 VMware Network Adapter VMnet1:这是Host用于与Host-Only虚拟网络进行通信的虚拟网卡。 VMware Network Adapter …

SpringSecurity 3.0.2.2版本

前言: 实践,认知,再实践,再认知 回顾: 随着2.0,2.1的实践,我们找到了真正的需求 将默认用户改为自定义用户,而不是读取表单 正片: 随着官方文档的不断阅读&#xff0c…

<论文>通过解耦注意力来增强Bert

一、摘要 本文介绍的是来自微软团队的论文《DeBERTa: Decoding-enhanced BERT with Disentangled Attention》,翻译过来是“使用解耦注意力机制的解码增强型Bert”,看词就知道又是一篇炼丹大作。 译文: 预训练神经语言模型的最新进展显著提高…

全国硕士研究生入学考试(考研)择校择专业之择专业主要因素

全国硕士研究生入学考试(考研)择校择专业之择专业主要因素 在中国,研究生入学考试(考研)不仅涉及选择合适的院校,更关键的是选择适合自身发展的专业。择专业的决策直接影响着未来的学术深造和职业发展。因…

AEO海关认证的注意事项

AEO海关认证的注意事项繁多且至关重要,企业需细致准备,确保万无一失。 首先,企业需深入研读相关政策文件,如《中华人民共和国海关注册登记和备案企业信用管理办法》及《海关高级认证企业标准》,以政策为指引&#xff0…