【Rust自学】3.5. 控制流:if else
3.5.0. 写在正文之前
欢迎来到Rust自学的第三章,一共有6个小节,分别是:
- 变量与可变性
- 数据类型:标量类型
- 数据类型:复合类型
- 函数和注释
- 控制流:
if else
(本文) - 控制流:循环
通过第二章的小游戏(没看的初学者强烈建议看一下),相信你已经学会了基本的Rust语法,而在第三章我们将更深一层,了解Rust中的通用的编程概念。
喜欢的话记得点赞、收藏加关注哦,想要跟着学下去记得关注专栏哦
3.5.1. if表达式的基本认识
- if表达式允许根据条件来执行不同的代码分支操作
- 这个条件必须是布尔类型。这点不同于Ruby、JS和C++,它们会把if后的非布尔类型转换为布尔类型
- 条件可以是一个字面值、一个表达式或是一个变量
- if表达式中,与条件相关联的代码就叫做分支(在讲
match
时就有提到过这个概念) - 可选的,在后面可以加上一个else表达式
fn main(){let machine = 6657;if machine < 11451 {println!("condition is true");} else {println!("condition is false");}
}
这个例子中,machine
这个变量的值是小于11451 的,所以程序会执行println!("condition is true");
这一行;如果修改machine
的值使其不小于114514,那么程序就会执行else
后的代码块。
3.5.2. 用else if处理多重条件
如果需要进行多重条件判断又不想在else
下不停地写嵌套,那么使用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 nor divisible by 4, 3 or 2");}
}
6既能被3整除也能被2整除,所以else if number % 3 == 0
和else if number % 2 == 0
都是true
,由于if
、else if
和else
是按顺序从上到下判断的所以谁在前面就输出谁。在这个例子中,else if number % 3 == 0
在前面,所以程序就会执行println!("Number is divisible by 3");
,而else if number % 2 == 0
下的代码块就不会被执行。
如果程序中使用了多于一个else if
,那么最好使用match
来重构代码。
比如上面那段话就可以重构为(非唯一解):
fn main() {let number = 6;match number {n if n % 4 == 0 => println!("Number is divisible by 4"),n if n % 3 == 0 => println!("Number is divisible by 3"),n if n % 2 == 0 => println!("Number is divisible by 2"),_ => println!("Number is not divisible by 4, 3, or 2"),}
}
显而易见,使用match
的代码更加直观
3.5.3. 在let语句中使用if
if
在Rust中是一个表达式,所以可以将它放在let
语句中等号的右边
fn main(){let condition = true;let number = if condition { 5 } else { 6 };println!("The value of number is:{}", number);
}
这个例子中,因为condition
是true
,所以会把5赋给number
,最后的输出结果就是The value of number is:5
;如果condition
是false
,那么就会把else
后的值6赋给number
。
这种写法于Python非常相像,但是两者有本质上的区别:
-
Rust:
- Rust 中的
if-else
是表达式,可以直接返回值。换句话说,if
结构本身可以参与到其他表达式的计算中。 - 在 Rust 中,几乎所有代码块都可以是表达式,比如 {} 块也可以返回一个值。
- Rust 中的
-
Python:
- Python 中的
if-else
是一个特定的三元运算符形式,专门为单行条件表达式设计。 - Python 的普通
if-else
语句是控制流的一部分,它不返回值,不能嵌入到其他表达式中。
- Python 中的
fn main(){let condition = true;let number = if condition { 5 } else { "6" };println!("The value of number is:{}", number);
}
这个例子在编译时会报错:if` and `else` habe incompatible types
,就是if
和else
拥有不兼容的类型。因为Rust是一个静态强类型语言,在编译时就必须知道变量的类型是什么以便这个变量在其他地方使用。在这个例子中,if
块下的返回值类型是i32
,else
块下的返回值是字符串类型,编译器无法在编译时确定变量number
的类型到底是i32
还是字符串类型,所以会报错。
一句话总结:if-else 表达式的分支必须返回相同类型的值
相关文章:
【Rust自学】3.5. 控制流:if else
3.5.0. 写在正文之前 欢迎来到Rust自学的第三章,一共有6个小节,分别是: 变量与可变性数据类型:标量类型数据类型:复合类型函数和注释控制流:if else(本文)控制流:循环 通过第二章…...
美国信息学奥林匹克竞赛USACO 2024年12月比赛铜级问题1. 循环舍入-答案代码
题目见: USACO 2024年12月比赛铜级问题1. 循环舍入(USACO 2024 December Contest, Bronze Problem 1. Roundabount Rounding) 最简单的青铜级 亲测所有得分点通过哈! 下一篇会给解题分析哦! #include <iostream> using namespace std;…...

Llama3模型详解 - Meta最新开源大模型全面解析
📚 Meta最新发布的Llama3模型在开源社区引起广泛关注。本文将全面解析Llama3的技术特点、部署要求和应用场景。 一、模型概述 1. 基本信息 发布机构: Meta AI开源协议: Llama 2 Community License Agreement模型规格: 7B/13B/34B/70B训练数据: 2万亿tokens上下文长…...
2021-02-12 c++里面cin.sync()函数的意思
回复急~救救菜鸡吧,C用cin.clear()和cin.sycn()清空缓存区一直清不了!_编程语言-CSDN问答 标识符号为:goodbit 无错误 Eofbit 已到达文件尾 failbit 非致命的输入/输出错误可挽回 badbit 致命的输入/输出错误无法挽回 int a 0;cin >> a;if (cin.rdstate() i…...

下载红米Note 9 Pro5G对应的LineageOS代码下载及编译
构建 LineageOS 进入网站:Info about gauguin | LineageOS Wiki,点击:Build for yourself,里面有详细的教程,我这里就按照Note 9 Pro 5G来。 机器环境 Ubuntu环境为:20.04.6LinagesOS版本:21-…...
《探索 Caffe2 的 C++接口在移动设备上的性能优化之路》
在当今移动应用日益智能化的时代,将深度学习框架如 Caffe2 的 C接口应用于移动设备上已成为众多开发者的目标。然而,移动设备资源相对有限,如何优化其性能成为了关键挑战。 一、移动设备应用深度学习的现状与挑战 随着智能手机等移动设备的…...
1.编写一个程序,给定一个大写字母,要求用小写输出
思路:ascII码值 例如:A的ASCII码值为65,a的ASCII码值为97,不难发现,大小写字母之间的ascii值相差了32 #include <stdio.h> int main() {char c;scanf("%c",&c);printf("%c",c32);retu…...

条件随机场(CRF)详解:原理、算法与实现(深入浅出)
目录 1. 引言2. 什么是条件随机场?2.1 直观理解2.2 形式化定义 3. CRF的核心要素3.1 特征函数3.2 参数学习 4. 实战案例:命名实体识别5. CRF vs HMM6. CRF的优化与改进6.1 特征选择6.2 正则化 7. 总结与展望参考资料 1. 引言 条件随机场(Conditional Ra…...

Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题
文章目录 问题:解决办法:gradle与 java的版本兼容AGP与Gradle的版本兼容kotlin 与 jvm 的版本兼容KGP、Gradle、AGP兼容关系kotlin 与 java 的编译版本配置 问题: 你从githb上clone了一个项目,本地跑的时候,各种报错。…...
防抖(Debounce)和节流(Throttle)的区别和应用场景
防抖(Debounce)和节流(Throttle)虽然都是用来限制函数的执行频率,但它们的实现方式和应用场景有所不同。以下是两者的主要区别: 1. 执行原理 防抖(Debounce): 执行条件&a…...
前端 Code Review 常见问题
在前端开发中,代码审查(Code Review)是一个至关重要的步骤。它不仅可以帮助团队成员之间共享知识和经验,还可以提高代码质量,减少错误和安全漏洞。以下是一些常见的前端 Code Review 问题和相应的解决方案。 1. 不一致…...
Python监控AWS ECS集群和服务的CPU和内存利用率
在电子商务或其他行业,重要节日通常会带来大量的流量和订单,这对应用程序的资源利用率提出了更高的要求。为了确保应用程序在节日期间能够顺利运行,提前监控和优化资源利用率至关重要。 在本文中,我们将介绍如何使用Python编写一个脚本,从AWS CloudWatch中获取ECS集群和服务的…...
淘宝天猫API接口深度解析:如何高效利用商品详情与关键词搜索商品列表功能
在电子商务的浩瀚海洋中,淘宝和天猫作为两大巨头,其平台上的商品信息无疑是商家和消费者关注的焦点。为了更高效地获取这些信息,淘宝天猫开放平台提供了丰富的API接口,其中商品详情接口和关键词搜索商品列表接口尤为关键。本文将深…...

python快速接入阿里云百炼大模型
1.注册阿里云账号 访问阿里云官网,完成账号注册流程,并开通百炼服务,网址:https://bailian.console.aliyun.com 2.获取 API Key 登录阿里云百炼平台,在个人中心或相关设置页面找到并生成 API Key,妥善保管此…...

基于AI对话生成剧情AVG游戏
游戏开发这个领域,一直有较高的学习门槛。作为一个非专业的游戏爱好者,如果想要开发游戏,往往受制于游戏引擎的专业程度,难以完成复杂的游戏项目。 AI IDE的诞生,提供了另外的一种思路,即通过AI 生成项目及…...
[flutter] 安卓编译配置
Maven 镜像 android/build.gradle buildscript {ext.kotlin_version 1.7.10repositories {google() // mavenCentral()maven { url https://maven.aliyun.com/repository/google }maven { url https://maven.aliyun.com/repository/jcenter }maven { url https://mav…...

使用ENSP实现NAT(2)
一、NAT的类型 二、静态NAT 1.项目拓扑 2.项目实现 路由器AR1配置: 进入系统视图 sys将路由器命名为AR1 sysname AR1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为192.168.10.254/24 ip address 192.168.10.254 24进…...
解决小程序中ios可以正常滚动,而Android失效问题
解决小程序中 iOS 可以正常滚动,而 Android 失效问题 在开发小程序时,我们经常会遇到一些平台兼容性问题。最近,我在开发一个小程序时遇到了一个问题:在 iOS 设备上可以正常滚动加载更多数据,而在 Android 设备上却无…...
docker安装部署
1.Docker简介 Docker是一个开源的容器引擎,开发者可以打包应用以及相关依赖包到一个可移植的容器中,发布到任何流行的Linux机器上。容器是完全使用沙箱机制,相互之间不会有任何接口,而且更轻量级。 1.1 概念 docker会自动搜索并下载应用镜像,镜像不仅包含应用本身,还包含…...
百度23届秋招研发岗A卷
百度23届秋招研发岗A卷 2024/12/16 1.下面关于 SparkSQL 中 Catalyst 优化器的说法正确的是(ABC) A.Catalyst 优化器利用高级编程语言功能(例如 Scala 的模式匹配)来构建可扩展的查询优化器 B.Catalyst 包含树和操作树的规则集…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...