Rust 控制流

ops/2024/9/22 16:49:06/

文章目录

  • 发现宝藏
  • 1. if 表达式
    • 1.1 基本用法
    • 1.2 带有 else if 的多重条件
    • 1.3 在 let 语句中使用 if
    • 1.4 类型不匹配的错误
  • 2. 循环结构
    • 2.1 使用 loop 进行无限循环
    • 2.2 使用 break 从循环中退出
    • 2.3 while 循环
    • 2.4 for 循环遍历集合
    • 2.5 使用 Range 进行迭代
  • 总结

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

Rust 是一种系统编程语言,其设计理念强调性能、安全性和并发。控制流是编程中的核心概念之一,它决定了程序的执行路径。Rust 提供了几种控制流机制:if 表达式、loop 循环、while 循环和 for 循环。这些控制流结构使得 Rust 能够有效地处理不同的执行路径和重复任务。本文将详细探讨 Rust 的控制流结构,并通过示例展示如何使用它们。

1. if 表达式

在 Rust 中,if 表达式用于根据条件选择执行不同的代码块。与其他语言不同的是,Rust 的 if 是一个表达式,这意味着它会返回一个值。

1.1 基本用法

以下示例展示了如何使用 if 表达式:

rust">fn main() {let number = 3;if number < 5 {println!("condition was true");} else {println!("condition was false");}
}

在这个例子中,if 表达式检查 number 是否小于 5。如果条件为真,程序将输出 "condition was true";否则,输出 "condition was false"

1.2 带有 else if 的多重条件

Rust 允许使用 else if 来处理多重条件,这样可以处理多个不同的情况:

rust">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");}
}

这段代码检查 number 是否能被 4、3 或 2 整除,并打印相应的消息。注意,Rust 只会执行第一个条件为真的分支。

1.3 在 let 语句中使用 if

由于 if 是一个表达式,你可以在 let 语句中使用它来赋值:

rust">fn main() {let condition = true;let number = if condition { 5 } else { 6 };println!("The value of number is: {}", number);
}

在这个例子中,number 将被赋值为 5,因为 condition 为真。if 的每个分支必须返回相同类型的值,否则会导致编译错误。

1.4 类型不匹配的错误

如果 if 表达式的分支返回不同类型的值,将会导致编译错误:

rust">fn main() {let condition = true;let number = if condition {5} else {"six"};println!("The value of number is: {}", number);
}

这会引发一个错误,因为 5 是整数类型,而 "six" 是字符串类型,它们不能被赋值给同一个变量。

2. 循环结构

Rust 提供了三种循环结构:loopwhilefor。每种循环都有其适用场景。

2.1 使用 loop 进行无限循环

loop 用于创建无限循环,直到显式地退出:

rust">fn main() {loop {println!("again!");}
}

这段代码会不断打印 "again!",直到你手动停止程序(通常使用 ctrl-c)。

2.2 使用 break 从循环中退出

loop 可以与 break 一起使用来从循环中退出:

rust">fn main() {let mut counter = 0;let result = loop {counter += 1;if counter == 10 {break counter * 2;}};println!("The result is {}", result);
}

在这个示例中,break 语句不仅退出循环,还返回了一个值(counter * 2),这个值被赋给 result 变量。

2.3 while 循环

while 循环在条件为真时执行,适用于动态条件:

rust">fn main() {let mut number = 3;while number != 0 {println!("{}!", number);number -= 1;}println!("LIFTOFF!!!");
}

这段代码会打印从 3 到 1 的倒计时,然后打印 "LIFTOFF!!!"。当 number 变为 0 时,循环结束。

2.4 for 循环遍历集合

for 循环用于遍历集合,如数组或向量。它更安全且简洁:

rust">fn main() {let a = [10, 20, 30, 40, 50];for element in a.iter() {println!("the value is: {}", element);}
}

for 循环遍历数组 a 中的每个元素,并打印它们。使用 for 循环避免了手动管理索引的问题,从而减少了出错的可能性。

2.5 使用 Range 进行迭代

for 循环可以结合 Range 进行次数控制:

rust">fn main() {for number in (1..4).rev() {println!("{}!", number);}println!("LIFTOFF!!!");
}

这里,(1..4).rev() 创建了一个从 3 到 1 的迭代器。rev 方法将 Range 的顺序反转,结果是从 3 开始到 1 结束的倒计时。

总结

Rust 提供了多种控制流结构来满足不同的需求:

  • if 表达式:用于条件判断,可以用于赋值和多重条件处理。
  • loop:用于创建无限循环,并可通过 break 语句返回值和退出循环。
  • while 循环:基于条件执行,适用于条件动态变化的情况。
  • for 循环:用于遍历集合,结合 Range 进行次数控制,代码更简洁安全。

通过合理使用这些控制流结构,你可以编写出高效、清晰且安全的 Rust 代码。


http://www.ppmy.cn/ops/111919.html

相关文章

Vite + Electron 时,Electron 渲染空白,静态资源加载错误等问题解决

问题 如果在 electron 里直接引入 vite 打包后的东西&#xff0c;那么有些资源是请求不到的 这是我的引入方式 根据报错&#xff0c;我们来到 vite 打包后的路径看一看 &#xff0c;修改一下 dist 里的文件路径试了一试 修改后的样子&#xff0c;发现是可以的了 原因分析 …

【可视化大屏系列】数据列表自动滚动效果

要实现列表的自动滚动效果&#xff0c;这里提供两种解决方案&#xff1a; 1.vue插件 官方文档&#xff1a;链接: vue-seamless-scroll &#xff08;1&#xff09;安装依赖 npm install vue-seamless-scroll --save&#xff08;2&#xff09;全局注册&#xff08;main.js中&a…

新手教学系列——用Nginx将页面请求分发到不同后端模块

在当今的Web开发中,前后端分离架构已经成为主流,尤其是大型应用项目。前端可以通过Vue这样的框架来统一管理页面和用户交互,而后端则通常会拆分成多个微服务模块,以便应对不同业务需求和功能扩展。在这样的架构下,Nginx作为一个高效、灵活的Web服务器,能够帮助我们将前端…

R语言统计分析——散点图1(常规图)

参考资料&#xff1a;R语言实战【第2版】 R语言中创建散点图的基础函数是plot(x,y)&#xff0c;其中&#xff0c;x和y是数值型向量&#xff0c;代表着图形中的&#xff08;x,y&#xff09;坐标点。 attach(mtcars) plot(wt,mpg,main"Basic Scatter plot of MPG vs. Weigh…

解码 OpenAI 的 o1 系列大型语言模型

OpenAI 表示&#xff0c;其 Strawberry 项目已升级为新的大型语言模型 (LLM) 系列&#xff0c;公司将其命名为 OpenAI o1。 该公司表示&#xff0c;新系列模型还包括一个 o1-mini 版本&#xff0c;以提高成本效益&#xff0c;可根据其推理能力与最新的GPT-4o 模型进行区分。 …

裸金属服务器与云服务器的区别有哪些?

随着云计算服务的快速发展&#xff0c;云服务器与裸金属服务器则称为各大企业基础设施的两大核心选择&#xff0c;会运用在不同的场景当中&#xff0c;本文就来介绍一下裸金属服务器与云服务器的区别都有哪些吧&#xff01; 裸金属服务器相对于云服务器来说有着卓越的性能&…

回溯-重新安排行程

1.排序 Collections.sort(list,(o1, o2)-> o1.get(0).compareTo(o2.get(0))); 2.返回值 3.往集合添加元素 Arrays.asList(元素) List<List<String>> list new ArrayList<>();List<String> path new ArrayList<>();// 将[["JFK"…

编译 Android 11源码

参考小米6 lineageos官方编译文档&#xff1a;https://wiki.lineageos.org/devices/sagit/build 单独编译 framework 以LineageOS18.1&#xff08;Android 11&#xff09;为例&#xff1a; 1、在源码根目录执行&#xff1a; make framework-minus-apex 2、用生成的framewo…