Rust 流程控制

开发中最常见的用来控制执行流的结构是判断和循环。

判断

Rust 中的 if 表达式允许根据条件执行不同的代码分支,提供一个条件并表示 “如果条件满足,运行这段代码;如果条件不满足,不运行这段代码。”

需要注意的是,Rust 是静态语言,因此无法自动将 int 之类的值转换为 bool , 也就是如下的代码会报错:

fn main()
{let num : i32 = 6if num {println!("if 内")}}

当然 “num == 6” 这种是允许的;并且如果条件只有一条语句的情况下,是可以不加括号的
Rust 的 if 也支持 else 的分支结构, 并且支持将 if 条件作为表达式使用,也就是 if 可以返回值,比如:
在这里插入图片描述

另外由于当一个判断有多个分支时,使用 else 会导致代码的杂乱,因此 Rust 提供了一种 match 分支结构,来避免这种问题;
match 是一种极为强大的控制流运算符,它允许开发者将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。模式可由字面值、变量、通配符和许多其他内容构成;match 的力量来源于模式的表现力以及编译器检查,它确保了所有可能的情况都得到处理。
match 的使用方法是match 关键字后跟一个表达式,然后用大括号将要检测的所有值包起来,最后在判断的值之后用 => 运算符将值和匹配成功后将要运行的代码分开,最后在分支代码尾部加一个逗号分隔开,或是直接将整个分支也用大括号包起来。例如可以像这样写:

fn main()
{let x : i32 = 1;match x {1 => {println!("x = 1")}2 => println!("x = 2"),_ => println!("x = 3"),}
}

看到这,第一反应就是这不就是 switch 吗,但其实还是有一些不同:

* 在Rust中,match 是一个表达式,也就是它可以返回值。而在其他一些语言中,switch是一个语句,不能返回值。
* Rust 的 match 必须穷尽所有可能的情况,并且提供了 _ 通配符来表示未指定的情况。如果不满足任何一个模式,编译器将会发出警告。
* Rust 的 match 能够处理复杂的模式匹配,例如枚举类型、结构体以及嵌套模式。而其他一些语言中的switch仅能匹配基本数据类型。
* match 在 Rust 中使用 => 来关联模式和执行代码块,而其他语言中通常使用 : 或 -> 。
* Rust 的 match 不需要使用break之类的方式打断,匹配成功之后只会执行匹配到的分支的代码;

总的来说,Rust的match更加强大且安全,因为它是一个表达式,并且需要穷尽所有可能的情况。

这里其实想写个match 结构体的例子的,但是按照C++的方式定义结构体没写出来一堆报错。。。。等后面看到结构体和类再写吧。。。。

循环

Rust 中提供了三种循环关键字: loop while for
for 和 while 应该是绝大多数编程语言都有的关键字,用法也没什么特殊的,就不细述了,看例子就可以了:
在这里插入图片描述

loop 关键字会不停的执行代码直到明确要求停止,可以使用 break 关键字来告诉程序何时停止循环,并且 loop 也支持返回表达式,具体看下面的代码:
在这里插入图片描述

这段代码,首先在 loop 中不停的对 index 进行单步增长1的操作,然后增长之后判断当前是否已经增长到10,到10 就调用break 退出,同时返回当前值 * 101;

Rust 还有一个特性,如果存在嵌套循环,break 和 continue 只会应用于此时最内层的循环。此时可以选择在一个循环上指定一个 循环标签(loop label),然后将标签与 break 或 continue 一起使用,使这些关键字应用于标记的循环而不是最内层的循环。比如将刚才的代码改一下:
在这里插入图片描述

首先给最外层循环定义了一个标签 outloop,然后在内部循环中检测,如果index == 3 就中断内层循环,并返回index*101(这里返回值变量被我删掉了,所以这个返回值其实没有用)。 接下来再检测,如果当前外部循环索引变量到了2,就使用break 中断 outloop 这个循环,至此程序结束。

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

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

相关文章

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)

十一、计划任务与Queue队列实践: 1. 计划任务: Linux环境下定时或者周期性的执行一些任务通常由cron这个守护进程来完成,这是一个系统自带的相对也比较方便的系统工具。 sudo apt-get install cron // 默认自带目录结构: 目录说…

驾驶数字未来:汽车业界数字孪生技术的崭新前景

随着数字化时代的到来,汽车行业正经历着前所未有的变革。数字孪生技术,作为一种前沿的数字化工具,正在为汽车行业带来革命性的影响,不仅改变着汽车制造和维护的方式,也为消费者带来了前所未有的体验。让我们一起探讨&a…

算法通过村第十四关-堆|白银笔记|经典问题

文章目录 前言在数组中寻找第K大的元素堆排序原理合并K个排序链表总结 前言 提示:想要从讨厌的地方飞出来,就得有藏起来的翅膀。 --三岛由纪夫《萨德侯爵夫人》 这里我们主要看一下经典的题目,这三个题目来说都是堆的热点问题。重点再理解处理…

SpringMVC之WEB-INF下页面跳转@ModelAttributeIDEA tomcat控制台中文乱码问题处理

WEB-INF下页面跳转 ModelAttribute来注解非请求处理方法 用途:预加载数据,会在每个RequestMapping方法执行之前调用。 特点:无需返回视图,返回类型void IDEA tomcat控制台中文乱码问题处理 复制此段代码:-Dfile.e…

有 AI,无障碍,AIoT 设备为视障人群提供便利

据世界卫生组织统计,全球共 22 亿人视力受损,包含 2.85 亿视障人群和 3,900 万全盲人群。而且,这一数字将随老龄化加剧不断增加。 虽然视障人群面临着诸多不便,但是针对视障人群的辅助设备却存在成本高、维护困难、操作复杂等问题…

【传输层协议】UDP/TCP结构特点与原理(详解)

文章目录 1. UDP1.1 UDP结构1.2 UDP特点1. 无连接2. 不可靠3. 面向数据报4. 缓冲区5. 大小受限6. 无序性 2. TCP2.1 TCP结构2.2 TCP特点1. 有连接2. 可靠性3. 面向字节流4. 拥塞控制5. 头部开销 2.3 TCP原理1. 确认应答(安全机制)2. 超时重传&#xff08…

爬虫 | 基础模块了解

文章目录 📚http协议📚requests模块📚re模块🐇 re.I 或 re.IGNORECASE🐇re.M或 re.MULTILINE🐇re.S 或 re.DOTALL🐇 re.A 或 re.ASCII🐇 re.X 或 re.VERBOSE🐇特殊字符类…

攻防世界数据逆向 2023

https://adworld.xctf.org.cn/contest/list?rwNmOdr1697354606875 目录 请求数据参数加密 cookie加密 响应数据解密 代码 请求数据参数加密 我们可以根据请求的关键字qmze1yzvhyzcyyjr获取到对应的加密地方 可以看到使用了函数_0x1dc70进行了加密 cookie加密 该步骤需…

SpringBoot面试题4:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个? Spring Boot支持多种日志框架,包括以下几种: Logback:Logback 是一个快速、灵活…

面试总结(mysql定精度/oom排查/spring三级缓存/stream流)

Mysql数据类型上的一个把握 1、MySQL Decimal为什么不会丢失精度 DECIMAL的存储方式和其他数据类型都不同,它是以字符串形式存储的。假设一个字段为DECIMAL(3,0),当我们存入100时,实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值&…

物联网AI MicroPython传感器学习 之 TDS水质检测传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 TDS是Total Dissolved Solids的缩写,中文名总溶解固体,也叫溶解性固体总量,他标识1升水中溶有多少毫克的可溶解性固体。一般来说,TDS值越高&…

react中利用useRef、forwardRef、useImperativeHandle获取并处理dom

React如何给组件设置ref属性&#xff0c;如果直接绑给组件&#xff0c;代码如下&#xff1a; import { useRef } from "react"function MyInput() {return (<input type"text"/>) }function App() {const myRef useRef(null)const handleClick ()…

电脑上播放4K视频需要具备哪些条件?

在电视上播放 4K&#xff08; 4096 2160 像素&#xff09;视频是很简单的&#xff0c;但在电脑设备上播放 4K 视频并不容易。相反&#xff0c;它们有自己必须满足的硬件要求。 如果不满足要求&#xff0c;在电脑上打开 4K 分辨率文件或大型视频文件会导致卡顿、音频滞后以及更…

HTTP/2 中的漏洞

另一个热门漏洞是 CVE-2023-44487。 该漏洞与 HTTP/2 协议实施中的一个缺陷有关&#xff0c;可用于实施 DDoS 攻击。使用该漏洞的攻击被命名为 HTTP/2 快速重置。 为什么它很危险 要利用该漏洞&#xff0c;攻击者需要在 HTTP/2 会话中打开大量请求&#xff0c;然后在不等待服…

mysql面试题49:MySQL中不同text数据类型的最大长度

该文章专注于面试&#xff0c;面试只要回答关键点即可&#xff0c;不需要对框架有非常深入的回答&#xff0c;如果你想应付面试&#xff0c;是足够了&#xff0c;抓住关键点 面试官&#xff1a;MySQL中TEXT数据类型的最大长度 在MySQL中&#xff0c;TEXT数据类型用于存储较大…

电脑提示Explorer.exe系统错误该怎么办?

平时我们在使用电脑时&#xff0c;系统有时会提示Explorer.exe系统错误&#xff0c;很多用户在遇到这类问题时不知道该怎么办。遇到Explorer.exe系统错误&#xff0c;该怎么办呢&#xff1f;下面我们一起来了解一下。 怎么修复Explorer.exe系统错误&#xff1f; Explorer.exe是…

LangChain-Decorators 包学习

libraryIO的链接&#xff1a;https://libraries.io/pypi/langchain-decorators 来colab玩玩它的demo 感觉这确实是个挺好用的库 想到之前纯调prompt来控制输出格式的痛苦&#xff0c;这个可太有效了 cool~ 最下面这个react的多智能体例子很好玩&#xff0c;来看看&…

The SDK location is inside Studio install location 解决

The SDK location is inside Studio install location 解决 安装 Android Studio SDK 时提示&#xff1a;The SDK location is inside Studio install location 解决 问题&#xff1a; 由于 SDK 与 编辑器(Android Studio)的安装在同一目录下所以报错。 解决 你需要在 Andro…

第三节:利用运行按钮运行VBA代码

《VBA之Excel应用》&#xff08;10178983&#xff09;是非常经典的&#xff0c;是我推出的第七套教程&#xff0c;定位于初级&#xff0c;目前是第一版修订。这套教程从简单的录制宏开始讲解&#xff0c;一直到窗体的搭建&#xff0c;内容丰富&#xff0c;实例众多。大家可以非…

leetcode-198.打家劫舍

1. 题目 2. 解答 dp[i]表示第i个位置的偷窃最大金额&#xff1b; room[i]表示第i间房间的现金&#xff1b; dp[0] room[0]; dp[1] max(room[0], room[1]); dp[i] max(dp[i-1], dp[i-2] room[i]); #include <stdio.h>int max(int a, int b) {return a > b? a:b;…