Rust编程语言:控制流(Control Flow)
条件分支结构if结构if condition {} else if condition {} else {}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); } }Rust 中 if 结构的 condition 必须是一个 bool 类型与 Python 不同。fn main() { let number 3; if number { println!(number was three); } }Rust 的 if 是一个表达式可以用做赋值操作以最后一个没有分号的表达式作为值返回一个if 结构只会产生一个值。fn main() { let condition true; let number if condition { 100 } else { 2 }; println!(The value of number is: {number}); }每个if 结构的所有分支的返回类型必须相同。fn main() { let condition true; let number if condition { 100 } else { x }; println!(The value of number is: {number}); }没有显式返回时返回类型为元组。fn main() { let condition true; let number if condition { 100 } else { }; }match基本结构match 值 {模式1 表达式1,模式2 表达式2,_ 默认表达式,}enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) - u8 { match coin { Coin::Penny 1, Coin::Nickel 5, Coin::Dime 10, Coin::Quarter 25, } }Rust 要求 match 的分支必须穷举被匹配对象所有可能的值Matches Are Exhaustive来提高安全性防止开发者遗漏。Rust 使用 _ 占位符表示剩余情况。fn main() { let dice_roll 9; match dice_roll { 3 println!(3), 7 println!(7), _ println!(no dice roll), } }if letmatch 语法是穷举的所以如果你仅只想匹配一种模式也要使用 _。fn main() { let config_max Some(3u8); match config_max { Some(max) println!(The maximum is configured to be {max}), _ (), } }这就显得很臃肿了为此Rust 提供了if let 语法上面的代码等价于fn main() { let config_max Some(3u8); if let Some(max) config_max { println!(The maximum is configured to be {max}); } }注意if let 只能用于模式匹配不能用于 先赋值 再做bool 判断与 Python 不同比如fn main() { let c [1, 2, 3, 4, 5]; if let a c[0] 2 { println!(hello,world!); } }猜猜会输出什么了解过python的读者可能会这么理解这个条件先把c[0] 赋值给变量a判断a是否等于2由于c[0] 等于1所以条件为假不执行打印语句。看下结果【hello,world!】居然输出出来了。这恰恰证明了Rust不支持像Python语言的海象操作符那样的运算。实际上逻辑是这样的if let后面写的是模式匹配a是一个“总能匹配成功”的变量模式所以它本身没有筛选条件。真正执行到这里时c[0] 2会先被计算成一个布尔值结果是false然后false也能被a这个模式匹配上所以if代码块一定会执行所以表面上看像条件c[0] 2实际上的条件没有条件if let a ...这种写法基本等价于“把右边的值绑定给 a然后进入代码块”代码块中的代码会无条件执行循环结构break跳出某个循环默认跳出 break 所在的循环continue跳过本轮进入下一轮loopRust 设计了 loop 关键字很有古韵。fn main() { loop { println!(again!); } }Rust 的 loop 是一个expression 可以返回值。fn main() { let mut counter 0; let result loop { counter 1; if counter 10 { break counter * 2; } }; println!(The result is {result}); }whilewhile 实际上就是 loop if和break搭配使用的结果。fn main() { let mut number 3; while number ! 0 { println!({number}!); number - 1; } println!(LIFTOFF!!!); }等价于fn main() { let mut number 3; loop { if number 0 { break; } println!({number}!); number - 1; } println!(LIFTOFF!!!); }forRust 没有C/Java/Go风格的for循环遍历均是迭代器循环。for 模式 in 迭代器 {循环体}基本用法fn main() { // 左闭右开 // 正序 for i in 0..10 { println!({},i); } // 倒序 for i in (0..10).rev() { println!({},i); } }loop labelsRust 的三种循环loop、while、for都可以使用循环标签label而且标签语法完全一致。label: loop { ... }label: while cond { ... }label: for x in iter { ... }可以搭配 break 实现跳出指定循环的效果。fn main() { let mut count 0; counting_up: loop { println!(count {count}); let mut remaining 10; loop { println!(remaining {remaining}); if remaining 9 { break; } if count 2 { break counting_up; } remaining - 1; } count 1; } println!(End count {count}); }

相关新闻

15.dataloader的使用

15.dataloader的使用

dataset vs dataloaderDataset概念 定义数据集位置和索引映射关系,类比扑克牌堆 一摞扑克牌是数据集,每张是我们的数据, 我们知道第一张牌长什么样。 DataLoader功能 是加载器,把我们的数据加载到一个神经网络当中。我们的手就可以…

2026/9/30 2:41:58 阅读更多 →
视频音频怎么稳定抽取?从媒体探测到可用音频资产的实现方案

视频音频怎么稳定抽取?从媒体探测到可用音频资产的实现方案

视频入库后,很多系统都会需要一份独立音频:内容审核要做语音检测,运营要截取片段,剪辑工具要读波形,语音识别要处理采样,甚至只做静音检测也需要可靠音轨。最常见的错误是把一条 FFmpeg 命令当成完整方案&a…

2026/9/30 2:41:58 阅读更多 →
实测AI自动生成管理系统:一句话需求,几分钟出整套系统

实测AI自动生成管理系统:一句话需求,几分钟出整套系统

实测系列第三篇(速度篇)。 前两篇测了「零基础用户」和「完整交付」,这一篇测速度:从一句话需求提交,到整套系统可验收,中间到底要多久、等待期间里发生了什么、快会不会牺牲质量。 全文用真实时间戳记录&a…

2026/9/30 2:40:58 阅读更多 →

最新新闻

Linux软硬链接本质:inode与路径的底层原理

Linux软硬链接本质:inode与路径的底层原理

1. 为什么软硬链接不是“复制”,而是“指针”——从文件系统底层讲清楚你有没有试过用ln命令创建一个链接,结果发现删掉源文件后,软链接打不开、硬链接还能访问?或者反过来,改了软链接指向的文件,硬链接却毫…

2026/9/30 7:56:32 阅读更多 →
Linux软链接与硬链接的本质区别及实战应用

Linux软链接与硬链接的本质区别及实战应用

1. 为什么软链接和硬链接不是“差不多就行”的替代品?在Linux系统里,软链接(symbolic link)和硬链接(hard link)常被新手统称为“快捷方式”,但这种类比会埋下严重隐患。我刚入行时就吃过亏&…

2026/9/30 7:56:32 阅读更多 →
SAP S/4HANA部署方式选择实战决策指南

SAP S/4HANA部署方式选择实战决策指南

简介:本资源是一份面向SAP系统实施顾问、云架构师及企业数字化转型从业者的S/4HANA云部署方式深度解析文档,聚焦SAP官方当前主流的四种部署模型及其业务定位差异,有效解决企业在上云路径选择中的决策困惑。文档以清晰对比方式展开&#xff1a…

2026/9/30 7:56:32 阅读更多 →
uni-app 登录页 UI 精修:从背景层到页面栈的细节实战

uni-app 登录页 UI 精修:从背景层到页面栈的细节实战

uni-app 里给微信小程序做登录页面,第一版基本都停留在“能用”的阶段:一个 logo、两个输入框、一个按钮,收工。等产品拿着竞品截图走过来,说一句“这个登录页面 UI 好看,你照着改一下”,很多人才发现自己在…

2026/9/30 7:56:32 阅读更多 →
uni-app微信小程序登录页:Vue3纯CSS高转化UI实战

uni-app微信小程序登录页:Vue3纯CSS高转化UI实战

做小程序登录页这件事,我前后推倒重来过至少七个版本。第一版是照着教程堆出来的深色背景配白色输入框,自认为挺"高级",结果上线一周后后台数据显示登录页跳出率接近四成;第二版换了配色,数据没动&#xff1…

2026/9/30 7:56:32 阅读更多 →
拆开这个环:优化 RAG 通道,解开 SEO 与 GEO 的死循环

拆开这个环:优化 RAG 通道,解开 SEO 与 GEO 的死循环

摘要:GEO 没有标准,它只是 RAG 的引用打分回路。这个回路正在反向磨平人类内容:RLHF 把 AI 磨成平均值,GEO 再让人类照着这个平均值生长,两个平均化首尾相接,咬成死循环。解法不是拒绝 AI,也不是…

2026/9/30 7:55:32 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →