【Rust】——控制流(if-else,循环)
🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客
🐳Java基础:Java基础_IT闫的博客-CSDN博客
🐋c语言:c语言_IT闫的博客-CSDN博客
🐟MySQL:数据结构_IT闫的博客-CSDN博客
🐠数据结构:数据结构_IT闫的博客-CSDN博客
💎C++:C++_IT闫的博客-CSDN博客
🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客
💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客
🥏python:python_IT闫的博客-CSDN博客
🐠离散数学:离散数学_IT闫的博客-CSDN博客
🥽Linux:Linux_Y小夜的博客-CSDN博客
🚝Rust:Rust_Y小夜的博客-CSDN博客
欢迎收看,希望对大家有用!
目录
🎯前言
🎯if表达式
🎯使用else if 处理多重条件
🎯let语句中使用if
🎯循环
🚝使用loop
🚝循环返回值
🚝while循环
🚝for循环
🎯前言
根据条件是否为真来决定是否执行某些代码,以及根据条件是否为真来重复运行一段代码的能力是大部分编程语言的基本组成部分。Rust 代码中最常见的用来控制执行流的结构是
if表达式和循环。
🎯if表达式
fn main() {let number = 3;if number < 5 {println!("condition was true");} else {println!("condition was false");}
}
所有的
if表达式都以if关键字开头,其后跟一个条件。在这个例子中,条件检查变量number的值是否小于 5。在条件为true时希望执行的代码块位于紧跟条件之后的大括号中。
if表达式允许根据条件执行不同的代码分支。你提供一个条件并表示 “如果条件满足,运行这段代码;如果条件不满足,不运行这段代码。”注意:条件 必须 是
bool值。如果条件不是bool值,我们将得到一个错误。
🎯使用else if 处理多重条件
fn main() {let number = 6;if number % 4 == 0 {println!("number is divisible by 4");} else if number % 3 == 0 {println!("number is divisible by 3");} else if number % 2 == 0 {println!("number is divisible by 2");} else {println!("number is not divisible by 4, 3, or 2");} }当执行这个程序时,它按顺序检查每个
if表达式并执行第一个条件为true的代码块。注意即使 6 可以被 2 整除,也不会输出number is divisible by 2,更不会输出else块中的number is not divisible by 4, 3, or 2。原因是 Rust 只会执行第一个条件为true的代码块,并且一旦它找到一个以后,甚至都不会检查剩下的条件了。
🎯let语句中使用if
因为
if是一个表达式,我们可以在let语句的右侧使用它,如:fn main() {let condition = true;let number = if condition { 5 } else { 6 };println!("The value of number is: {number}"); }注意:代码块的值是其最后一个表达式的值,而数字本身就是一个表达式。
并且,Rust是强类型,变量比较必须类型一致。
🎯循环
🚝使用loop
暴力方法:直到我们手动停止程序。大部分终端都支持一个快捷键,ctrl-c,来终止一个陷入无限循环的程序。
但是,Rust 提供了一种从代码中跳出循环的方法。可以使用
break关键字来告诉程序何时停止循环,我们在猜谜游戏中也使用了continue。循环中的continue关键字告诉程序跳过这个循环迭代中的任何剩余代码,并转到下一个迭代。
🚝循环返回值
loop的一个用例是重试可能会失败的操作,比如检查线程是否完成了任务。然而你可能会需要将操作的结果传递给其它的代码。如果将返回值加入你用来停止循环的break表达式,它会被停止的循环返回:fn main() {let mut counter = 0;let result = loop {counter += 1;if counter == 10 {break counter * 2;}};println!("The result is {result}"); }多重循环可以使用标签:
如果存在嵌套循环,
break和continue应用于此时最内层的循环。你可以选择在一个循环上指定一个 循环标签(loop label),然后将标签与break或continue一起使用,使这些关键字应用于已标记的循环而不是最内层的循环。下面是一个包含两个嵌套循环的示例fn main() {let mut count = 0;'counting_up: loop {println!("count = {count}");let mut remaining = 10;loop {println!("remaining = {remaining}");if remaining == 9 {break;}if count == 2 {break 'counting_up;}remaining -= 1;}count += 1;}println!("End count = {count}"); }外层循环有一个标签
counting_up,它将从 0 数到 2。没有标签的内部循环从 10 向下数到 9。第一个没有指定标签的break将只退出内层循环。break 'counting_up;语句将退出外层循环。
🚝while循环
在程序中计算循环的条件也很常见。当条件为
true,执行循环。当条件不再为true,调用break停止循环。这个循环类型可以通过组合loop、if、else和break来实现;fn main() {let mut number = 3;while number != 0 {println!("{number}!");number -= 1;}println!("LIFTOFF!!!"); }这种结构消除了很多使用
loop、if、else和break时所必须的嵌套,这样更加清晰。当条件为true就执行,否则退出循环。
🚝for循环
for循环的安全性和简洁性使得它成为 Rust 中使用最多的循环结构。倒计时例子,大部分 Rustacean 也会使用
for循环。这么做的方式是使用Range,它是标准库提供的类型,用来生成从一个数字开始到另一个数字之前结束的所有数字的序列。下面是一个使用
for循环来倒计时的例子,它还使用了一个我们还未讲到的方法,rev,用来反转 range: 注意: 以下代码不会踏足到数字 9 ,仅从一个数字开始到另一个数字之前fn main() {for number in (1..4).rev() {println!("{number}!");}println!("LIFTOFF!!!"); }
相关文章:
【Rust】——控制流(if-else,循环)
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...
通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试
mydev.c #include <linux/init.h> #include <linux/module.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h>// 创建功能码 #define LED_ON _IO(l, 1) #d…...
费舍尔FISHER金属探测器探测仪维修F70
美国FISHER LABS费舍尔地下金属探测器,金属探测仪等维修(考古探金银铜探宝等仪器)。 费舍尔F70视听目标ID金属探测器,Fisher 金属探测器公司成立于1931年,在实验条件很艰苦的情况下,研发出了地下金属探测器…...
Airtest-Selenium实操小课③:下载可爱猫猫图片
1. 前言 那么这周我们看看如何实现使用Airtest-Selenium实现自动搜索下载可爱的猫猫图片吧~ 2. 需求分析和准备 整体的需求大致可以分为以下步骤: 打开chrome浏览器 打开百度网页 搜索“可爱猫猫图片” 定位图片元素 创建存储图片的文件夹 下载可爱猫猫图片…...
Druid无法登录监控页面
问题表现:在配置和依赖都正确的情况下,无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的🤔 Debug发现 ResourceServlet 是Druid的登录实现, 且调试发现usernameParam是null&am…...
【Linux系统化学习】深入理解匿名管道(pipe)和命名管道(fifo)
目录 进程间通信 进程间通信目的 进程间通信的方式 管道 System V IPC(本地通信) POSIX IPC(网络通信) 管道 什么是管道 匿名管道 匿名管道的创建 匿名管道的使用 匿名管道的四种情况 匿名管道的五种特性 命名管道 …...
信息学奥赛一本通1209:分数求和
1209:分数求和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 19111 通过数: 10647 【题目描述】 输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为11;若最终结果的分母为11&am…...
LabVIEW储氢材料循环寿命测试系统
LabVIEW储氢材料循环寿命测试系统 随着氢能技术的发展,固态储氢技术因其高密度和安全性成为研究热点。储氢材料的循环寿命是衡量其工程应用的关键。然而,传统的循环寿命测试设备存在成本高、测试效率低、数据处理复杂等问题。设计了一种基于LabVIEW软件…...
Unity3D 框架如何搭建基于纯Lua的U框架与开发模式详解
前言 Unity3D 是一款非常流行的游戏开发引擎,它支持C#、JavaScript和Boo等多种脚本语言。而Lua语言作为一种轻量级的脚本语言,也在游戏开发中得到了广泛应用。本文将介绍如何在Unity3D框架中搭建基于纯Lua的U框架,并详细讲解其开发模式。 对…...
Linux常见指令(2)
目录 1、tar指令 ! 2、bc指令 3、uname 4、重要热键 5、关机 1、tar指令 ! 功能:压缩/解压缩文件或目录,类似zip 我们先来看一下我们的文件即目录,接下来我们输入指令: tar -czf test.tgz test 压缩 -c …...
【C++】封装
1.封装的意义 封装是C面向对象三大特性之一 实例化(通过一个类 创建一个对象的过程) 类中的属性和行为 我们统一称为 成员 属性 成员属性 成员变量 行为 成员函数 成员方法 封装的意义: 1.将属性和行为作为一个整体,表现生活中的事…...
Maxwell安装部署
1 Maxwell输出格式 database:变更数据所属的数据库table:变更数据所属的表type:数据变更类型ts:数据变更发生的时间xid:事务idcommit:事务提交标志,可用于重新组装事务data:对于inse…...
说一下JVM类加载机制?
Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。 在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊…...
解决SpringAMQP工作队列模型程序报错:WARN 48068:Failed to declare queue: simple.queue
这里写目录标题 1.运行环境2.报错信息3.解决方案4.查看解决之后的效果 1.运行环境 使用docker运行了RabbitMQ的服务器: 在idea中导入springAMQP的jar包,分别编写了子模块生产者publisher,消费者consumer: 1.在publisher中运行测试…...
mysql在服务器中的主从复制Linux下
mysql在服务器中的主从复制Linux下 为什么要进行主从复制主从复制的原理主从复制执行流程操作步骤主库创建从库创建 测试 为什么要进行主从复制 在业务中通常会有情况,在sql执行时,将表锁住,导致不能进行查询,这样就会影响业务的…...
QT-Day2
思维导图 作业 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#x…...
流量分析——陇剑杯 2021【签到、jwt】
目录 签到1、攻击者正在进行的可能是什么协议的网络攻击 jwt1、该网站使用了______认证方式。前置知识:解: 2、黑客绕过验证使用的jwt中,id和username是3、黑客获取webshell之后,权限是什么4、黑客上传的恶意文件文件名是5、黑客在…...
Java并发基础:原子类之AtomicIntegerFieldUpdater全面解析
本文概要 AtomicIntegerFieldUpdater类提供了一种高效、简洁的方式来原子性地更新对象的volatile字段,无需使用重量级的锁机制,它通过基于反射的API实现了细粒度的并发控制,提升了多线程环境下的性能表现。 AtomicIntegerFieldUpdater核心概…...
普中51单片机学习(串口通信)
串口通信 原理 计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送 。控制简单、传输速度快࿱…...
【ArcGIS】利用高程进行坡度分析
在ArcGIS中利用高程进行坡度分析 坡度ArcGIS实操参考 坡度 坡度是地表单元陡缓的程度,通常把坡面的垂直高度和水平距离的比值称为坡度。 坡度的表示方法有百分比法、度数法、密位法和分数法四种,其中以百分比法和度数法较为常用。 (1&#…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
“Reactive Stream Processing in Industrial IoT using DDS and Rx” 是指在工业物联网(IIoT)场景中,结合 DDS(Data Distribution Service) 和 Rx(Reactive Extensions) 技术,实现 …...
【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
