Rust 流程控制

news2024/11/19 14:36:24

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

判断

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

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

fn main()
{
    let num : i32 = 6
    if 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.coloradmin.cn/o/1095097.html

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

相关文章

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

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

【算法1-4】递推与递归-P1002 [NOIP2002 普及组] 过河卒

## 题目描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示&#…

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

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

CVPR 2023 | 数据驱动的解释对分布外数据具有鲁棒性吗?

论文链接: https://arxiv.org/abs/2303.16390 代码链接: https://github.com/tangli-udel/DRE 01. 研究背景:数据驱动的解释对分布外数据具有鲁棒性吗? 近年来,将黑盒机器学习(ML)模型用于高风…

1.14.C++项目:仿muduo库实现并发服务器之Util模块的设计

一、Util模块 二、实现思想 (一)管理 实现一些工具接口读取文件内容向文件写入内容URL编码URL解码通过HTTP状态码获取描述信息通过文件后缀名获取mime判断一个文件是不是目录判断一个文件是否是一个普通文件HTTP资源路径有效性判断 (二&am…

《视觉SLAM十四讲》公式推导(一)

文章目录 CH3 三维空间刚体运动CH3-1 旋转矩阵的推导CH3-2 旋转矩阵是正交矩阵的证明CH3-3 变换矩阵的逆的推导CH3-4 罗德里格斯公式推导 CH3 三维空间刚体运动 CH3-1 旋转矩阵的推导 (1)二维空间中的旋转矩阵 易得 { x ′ ∣ O P ′ ∣ c o s ( θ …

高校教务系统登录页面JS分析——重庆交通大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

云耀服务器L实例部署Discuz!Q论坛|华为云云耀云服务器L实例评测使用体验

文章目录 云耀服务器L实例部署Discuz!Q论坛1. 华为云云耀服务器L实例介绍2. Discuz!Q 简介3. 部署华为云云耀服务器L实例3.1 云耀服务器L实例购买3.1.1 云耀服务器L实例初始化配置3.1.2 远程登录云耀服务器L实例 4. Discuz!Q安装部署4.1 Apache安装4.2 中间件配置4.…

SpringCloud:分布式事务Seata部署和集成

一、部署Seata的tc-server 1.下载 首先我们要下载seata-server包,地址在http://seata.io/zh-cn/blog/download.html 2.解压 在非中文目录解压缩这个zip包,其目录结构如下: 3.修改配置 修改conf目录下的registry.conf文件: 内容…

【重拾C语言】十三、动态数据组织(二)链表(创建、遍历检索、插入、删除、交换)

目录 前言 十三、动态数据组织 13.1~2 动态数据组织、动态变量 13.3 链表 13.3.1 单向链表—创建 13.3.2 单向链表—遍历检索 13.3.3 单向链表—插入、删除与交换 13.3.4 单向链表—例题 13.3.5 栈和队列 前言 链表是一种常见的动态数据结构,它由一系列节点…

【Kolla-ansible 16.1.0.dev156】部署/评估快速入门(报错的文章,后面不用看了)

Kolla-ansible 16.1.0.dev156 部署/评估快速入门 报错的文章,后面不用看了 主机必须满足以下最低要求: 2 个网络接口 8GB 主内存 40GB 磁盘空间 rootubuntu:~# sudo apt update Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease Get:2…

【LeetCode 算法专题突破】双指针(⭐)

文章目录 前言1. 移动零题目描述代码 2. 复写零题目描述代码 3. 快乐数题目描述代码 4. 盛最多水的容器题目描述代码 5. 有效三角形的个数题目描述代码 6. 三数之和题目描述代码 7. 四数之和题目描述代码 总结 前言 学算法入门必学的一个章节,双指针算法&#xff0…

Maven 快速入门

文章目录 一、Maven 间接和快速入门1.1 Maven 介绍1.2 Maven 主要作用理解1.3 Maven 安装和配置 二、基于 IDEA 的 Maven 工程创建2.1 梳理 Maven 工程 GAVP 属性2.2 IDEA 构建 Maven JavaSE 工程2.3 IDEA 构建 Maven JavaEE 工程2.4 Maven 工程项目结构说明 三、Maven 核心功能…

巧用正则表达式

文章目录 题目巧用正则表达式,题目将十进制转为16进制,可以采用Java的语法来表示 题目 巧用正则表达式,题目将十进制转为16进制,可以采用Java的语法来表示 String nInteger.toString(num,16); 那如何确定是否都是字母呢a-f呢&…

使用Python创建faker实例生成csv大数据测试文件并导入Hive数仓

文章目录 一、Python生成数据1.1 代码说明1.2 代码参考 二、数据迁移2.1 从本机上传至服务器2.2 检查源数据格式2.3 检查大小并上传至HDFS 三、beeline建表3.1 创建测试表并导入测试数据3.2 建表显示内容 四、csv文件首行列名的处理4.1 创建新的表4.2 将旧表过滤首行插入新表 一…

qml基础语法

文章目录 基础语法例子 属性例子 核心元素元素item RectangleText例子 Image例子 MouseArea例子Component(组件)例子简单变换例子 定位器ColumnRowGridFlowRepeater 布局InputKeys 基础语法 QML是一种用于描述对象如何相互关联的声明式语言。  QtQuick是…

qt-C++笔记之按行读取文件并切换复选框打印复选框拼接出的字符串

qt-C笔记之按行读取文件并切换复选框打印复选框拼接出的字符串 code review! 文章目录 qt-C笔记之按行读取文件并切换复选框打印复选框拼接出的字符串1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt 1.运行 2.文件结构 3.main.cc 代码 #include <QApplication> #…

简易通讯录Promax

前言&#xff1a;哈喽小伙伴们&#xff0c;我们在前边的文章中已经介绍过了如何用C语言实现一个简易的通讯录&#xff0c;但是我们这个通讯录存在两个问题&#xff1a; 一是通讯录的大小不能自由变化&#xff1b;二是通讯录的信息在程序退出之后就没有了&#xff0c;不能保存。…

【C语言】进阶——文件操作

目录 前言 1.什么是文件 程序文件&#xff1a; 数据文件&#xff1a; 文件名&#xff1a; 2.文件的打开和关闭 2.1文件指针 2.2文件指针使用 2.3文件的打开和关闭 2.4 文件的使用方式 2.5文件的顺序读写 ✌字符输出函数fputc ✌字符输入函数fgetc ✌文本行输…

【重拾C语言】十三、动态数据组织(一)动态变量(malloc、calloc、realloc、free)

目录 前言 十三、动态数据组织 13.1 动态数据组织 13.2 动态变量 malloc函数 calloc函数 realloc函数 free函数 程序实例 前言 C语言中的动态数据组织是指在程序运行时根据需要动态地分配内存空间来存储数据。这允许程序在运行时根据实际需求来创建、修改和释放数据结…