【Rust】003-基础语法:流程控制
【Rust】003-基础语法:流程控制
文章目录
- 【Rust】003-基础语法:流程控制
- 一、概述
- 二、if 表达式
- 1、语法格式
- 2、多个
- 3、获取表达式的值
- 三、循环
- 1、loop:无限循环,可跳出
- 无限循环
- 跳出循环
- 返回值
- 2、while:条件循环,可跳出
- 3、for:常用于访问集合
- 访问集合:while 示例
- 访问集合:for 示例
- 对一个 range 进行循环
- 4、labels:给循环加标签
一、概述
控制流是编程语言的一个重要概念。程序员通过控制流可以控制哪些代码要执行。在Rust中,最常见的两种控制流结构是if表达式和循环。
二、if 表达式
1、语法格式
这里的 condition 必须是 bool 类型
if condition {// code to execute if the condition is true
} else {// code to execute if the condition is false
}
2、多个
if condition1 {// code to execute if condition1 is true
} else if condition2 {// code to execute if condition1 is false and condition2 is true
} else {// code to execute if both conditions are false
}
3、获取表达式的值
正如这一小节的标题所说,
if其实是一个表达式,具有返回值。需要注意的是,
if分支和else分支的返回值必须是同一类型。
fn main() {let temperature = 20;let weather = if temperature >= 25 {"hot"} else {"cool"};println!("The weather today is {}.", weather);
}
三、循环
Rust中提供了三种循环方式,
loop,while,for。
1、loop:无限循环,可跳出
无限循环
loop关键字会创建一个无限循环
loop {// code to execute repeatedly
}
跳出循环
想要从循环中跳出,需要配合
break关键词使用,下面的代码也展示了 continue 的用法!
let mut counter = 0;loop {counter += 1;if counter < 5 {continue;}println!("Hello, world!");if counter >= 5 {break;}
}
返回值
fn main() {let target = 10;let mut sum = 0;let mut counter = 1;let result = loop {sum += counter;if sum >= target {break counter; // The value of counter will be returned from the loop as a result}counter += 1;};println!("The first number whose sum of all previous numbers is greater than or equal to {} is {}.", target, result);
}
2、while:条件循环,可跳出
while condition {// code to execute while the condition is true
}
3、for:常用于访问集合
访问集合:while 示例
fn main() {let numbers = [1, 2, 3, 4, 5];let mut index = 0;while index < numbers.len() {println!("The value is: {}", numbers[index]);index += 1;}
}
访问集合:for 示例
fn main() {let numbers = [1, 2, 3, 4, 5];for number in numbers {println!("The value is: {}", number);}
}
对一个 range 进行循环
这里的
1..=3表示[1,3]这个区间的整数。如果是左闭右开,要写成1..3。
fn main() {for x in 1..=3 {println!("x: {}", x);}
}
4、labels:给循环加标签
三种循环都支持!
当循环存在嵌套关系时,break和continue只会对最内层的循环生效。但是有时候我们希望可以对外层的循环做break或者continue,这时该怎么办?幸运的是,Rust 可以给循环加上标签,从而break和continue都可以直接操作标签。
fn main() {let x = 1;'outer: loop {let mut y = 1;'inner: loop {if y == 3 {y += 1;continue 'inner; // Skips to the next iteration of the 'inner loop}println!("x: {}, y: {}", x, y);y += 1;if y > 5 {break 'outer; // Breaks out of the 'inner loop}}}
}
带返回值
fn main() {let x = 1;let z = 'outer: loop {let mut y = 1;'inner: loop {if y == 3 {y += 1;continue 'inner; // Skips to the next iteration of the 'inner loop}println!("x: {}, y: {}", x, y);y += 1;if y > 5 {break 'outer y; // Breaks out of the 'inner loop}}};println!("z: {}", z);
}
相关文章:
【Rust】003-基础语法:流程控制
【Rust】003-基础语法:流程控制 文章目录 【Rust】003-基础语法:流程控制一、概述二、if 表达式1、语法格式2、多个3、获取表达式的值 三、循环1、loop:无限循环,可跳出无限循环跳出循环返回值 2、while:条件循环&…...
0829【综述】面向时空数据的区块链研究综述
摘要:时空数据包括时间和空间2个维度,常被应用于物流、供应链等领域。传统的集中式存储方式虽然具有一定的便捷性,但不能充分满足时空数据存储及查询等要求,而区块链技术采用去中心化的分布式存储机制,并通过共识协议来保证数据的安全性。研究现有区块链1.0、2.0和以Block-DAG为…...
MySQL高级篇(SQL优化、索引优化、锁机制、主从复制)
目录 0 存储引擎介绍1 SQL性能分析2 常见通用的JOIN查询 SQL执行加载顺序七种JOIN写法3 索引介绍 3.1 索引是什么3.2 索引优劣势3.3 索引分类和建索引命令语句3.4 索引结构与检索原理3.5 哪些情况适合建索引3.6 哪些情况不适合建索引4 性能分析 4.1 性能分析前提知识4.2 Expla…...
YOLOV8模型使用-检测-物体追踪
这个最新的物体检测模型,很厉害的样子,还有物体追踪的功能。 有官方的Python代码,直接上手试试就好,至于理论,有想研究在看论文了╮(╯_╰)╭ 简单介绍 YOLOv8 中可用的模型 YOLOv8 模型的每个类别中有五个模型用于检…...
springmvc:设置后端响应给前端的json数据转换成String格式
设置spring-mvc.xml: xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:context"http://www.springframework.org/schema/context"xmlns:xsi"http://www.w…...
Mac安装brew、mysql、redis
mac安装brew mac安装brewmac安装mysql并配置开机启动mac安装redis并配置开机启动 mac安装brew 第一步:执行. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"第二步:输入开机密码 第三…...
MLC-LLM 部署RWKV World系列模型实战(3B模型Mac M2解码可达26tokens/s)
0x0. 前言 我的 ChatRWKV 学习笔记和使用指南 这篇文章是学习RWKV的第一步,然后学习了一下之后决定自己应该做一些什么。所以就在RWKV社区看到了这个将RWKV World系列模型通过MLC-LLM部署在各种硬件平台的需求,然后我就开始了解MLC-LLM的编译部署流程和…...
Unity 之 参数类型之值类型参数的用法
文章目录 基本数据类型结构体结构体的进一步补充 总结: 当谈论值类型参数时,我们可以从基本数据类型和结构体两个方面详细解释。值类型参数指的是以值的形式传递给函数或方法的数据,而不是引用。 基本数据类型 基本数据类型的值类型参数&…...
VScode远程连接主机
一、前期准备 1、Windows安装VSCode; 2、在VSCode中安装PHP Debug插件; 3、安装好Docker 4、在容器中安装Xdebug ①写一个展现phpinfo的php文件 <?php phpinfo(); ?>②在浏览器上打开该文件 ③复制所有信息丢到Xdebug: Installation instr…...
【iOS】属性关键字
文章目录 前言一、深拷贝与浅拷贝1、OC的拷贝方式有哪些2. OC对象实现的copy和mutableCopy分别为浅拷贝还是深拷贝?3. 自定义对象实现的copy和mutableCopy分别为浅拷贝还是深拷贝?4. 判断当前的深拷贝的类型?(区别是单层深拷贝还是完全深拷贝…...
【计算机基础】Git从安装到使用,详细每一步!扩展Github\Gitlab
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
深入了解Docker镜像操作
Docker是一种流行的容器化平台,它允许开发者将应用程序及其依赖项打包成容器,以便在不同环境中轻松部署和运行。在Docker中,镜像是构建容器的基础,有些家人们可能在服务器上对docker镜像的操作命令不是很熟悉,本文将深…...
嵌入式开发-单片机学习介绍
一、单片机入门篇 单片机的定义和历史 单片机是一种集成了微处理器、存储器、输入输出接口和其他功能于一体的微型计算机,具有高度的集成性和便携性。单片机的历史可以追溯到20世纪70年代,随着微电子技术的不断发展,单片机逐渐成为了工业控…...
5、Spring之Bean生命周期源码解析(销毁)
Bean的销毁过程 Bean销毁是发送在Spring容器关闭过程中的。 在Spring容器关闭时,比如: AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); UserService userService = (UserService) context.getBean("userSe…...
开发多点触控MFC应用程序
当下计算机变得越来越智能化,越来越无所不能,触摸屏的普及只是时间问题了。 虽然鼠标和键盘不会很快就离开人们的视野,毕竟人们使用鼠标跟键盘已经成为一种习惯,但是处理信息或者说操作计算机的其他方法也层出不穷——比如触控技术…...
使用nlohmann json库进行序列化与反序列化
nlohmann源码仓库:https://github.com/nlohmann/json使用方式:将其nlohmann文件夹加入,包含其头文件json.hpp即可demo #include <iostream> #include "nlohmann/json.hpp" #include <vector>using json nlohmann::js…...
高教社杯数模竞赛特辑论文篇-2012年A题:葡萄酒的评价(附获奖论文)
目录 摘 要 一、问题重述 二、问题分析 2.1 问题一的分析 2.2 问题二的分析...
手写RPC——数据序列化工具protobuf
手写RPC——数据序列化工具protobuf Protocol Buffers(protobuf)是一种用于结构化数据序列化的开源库和协议。下面是 protobuf 的一些优点和缺点: 优点: 高效的序列化和反序列化:protobuf 使用二进制编码,…...
【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发)
【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发) 一、学习资料 (LGBM)是一种基于梯度增强决策树(GBDT)算法。 本次研究三个内容,分别是回归预测,二分类预测和多分类预…...
Linux进程间通信的几种方式
分析&回答 管道(pipe)以及有名管道:管道可用于有亲缘关系进程间通信,有名管道克服了管道没有名字的限制,因此具有管道的所有功能之外,它还允许无亲缘关系进程间通信。信号(Signalÿ…...
BBDown实用指南:高效下载B站视频的完整解决方案
BBDown实用指南:高效下载B站视频的完整解决方案 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一个功能强大的命令行式哔哩哔哩视频下载器,专为技术爱…...
无人机开发平台全解析:从开源飞控到厂商SDK的选型与应用实战
1. 项目概述:为什么无人机开发平台变得如此重要?几年前,当我第一次尝试给一台消费级无人机增加一个简单的自动航线功能时,我发现自己面对的是一个完全封闭的“黑箱”。飞控固件是加密的,传感器数据无法实时获取&#x…...
RISC-V PMP物理内存保护:硬件级隔离机制与嵌入式系统实战配置
1. 项目概述:为什么我们需要物理内存保护?在嵌入式系统、实时操作系统乃至一些对可靠性要求极高的服务器场景里,系统崩溃往往不是由复杂的逻辑错误直接导致的,而是源于一些看似“低级”的内存访问越界。想象一下,你正在…...
如何在VSCode中实现高效Mermaid图表实时预览:一站式解决方案
如何在VSCode中实现高效Mermaid图表实时预览:一站式解决方案 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview 还在为技术文档中的图表制作而头疼吗?你是…...
【码上爬】 题十一:wasm小试牛刀 wasm文件处理,堆栈分析
暗号:aHR0cHM6Ly9tYXNoYW5ncGEuY29tL3Byb2JsZW0tZGV0YWlsLzExLw题目:先分析数据接口,可以看到m和ts是加密的,但是这里的ts的值应该是一个时间戳,所以主要要逆向的值是m:然后在发起程序的最上面的堆栈下一个…...
别再手动调了!用MATLAB的Text对象属性批量设置图表字体,效率提升90%
MATLAB科研绘图效率革命:Text对象属性批量操控指南 科研工作者常面临一个看似简单却极其耗时的任务——图表字体格式调整。当论文需要提交到不同期刊,每个期刊对图表字体、字号、颜色都有特定要求时,手动逐个修改轴标签、标题和图例的字体属性…...
华硕笔记本终极控制神器:G-Helper轻量化完全指南
华硕笔记本终极控制神器:G-Helper轻量化完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertb…...
为什么你的Perplexity本地服务响应慢3.7倍?:NVIDIA驱动版本、vLLM推理后端与量化精度的隐性博弈
更多请点击: https://codechina.net 第一章:Perplexity本地服务查询 Perplexity 作为一款强调实时信息检索与引用溯源的 AI 工具,其官方未提供公开的本地化部署方案。但开发者可通过构建轻量级代理服务,将本地运行的大语言模型&a…...
setup-java企业级实践:大型项目的依赖缓存和版本矩阵测试
setup-java企业级实践:大型项目的依赖缓存和版本矩阵测试 【免费下载链接】setup-java Set up your GitHub Actions workflow with a specific version of Java 项目地址: https://gitcode.com/gh_mirrors/se/setup-java 在现代软件开发中,Java环…...
喜马拉雅音频下载神器:告别网络限制,随时随地畅听付费内容
喜马拉雅音频下载神器:告别网络限制,随时随地畅听付费内容 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 …...
