【Rust自学】18.1. 能用到模式(匹配)的地方
📅 2026/7/23 19:00:05
👁️ 次浏览
18.1 能用到模式匹配的地方18.1.1. 什么是模式模式pattern是 Rust 里一种特殊的语法用于匹配复杂类型和简单类型的结构。将模式与match表达式以及其他构造结合使用可以更好地控制程序的流程。模式由以下元素的一些组合构成- 字面值- 解构的数组、enum、struct和元组- 变量- 通配符- 占位符想要使用模式需要将它与某个值进行比较如果模式匹配就可以在代码中使用这个值的相应部分。18.1.2.match的分支Armarm分支可以使用模式。它的形式是match VALUE { PATTERN EXPRESSION, PATTERN EXPRESSION, PATTERN EXPRESSION, }match必须是穷尽的也就是说你必须覆盖所有可能的情况。match中也经常用到_通配符。它会匹配任何东西并且不会绑定到变量上。它通常用于match的最后一个分支或用于忽略某个值。如果想看更详细的介绍可以去 6.3. 控制流运算符-match。18.1.3.if let表达式if let表达式可以看作是只匹配一种可能性的match表达式。它还可以可选地包含-else if-else-else if let与match相比if let的缺点是不会检查穷尽性。如果我们省略了最后的else块从而漏掉对某些情况的处理编译器不会提醒我们可能存在逻辑错误。看个例子fn main() { let favorite_color: Optionstr None; let is_tuesday false; let age: Resultu8, _ 34.parse(); if let Some(color) favorite_color { println!(Using your favorite color, {color}, as the background); } else if is_tuesday { println!(Tuesday is green day!); } else if let Ok(age) age { if age 30 { println!(Using purple as the background color); } else { println!(Using orange as the background color); } } else { println!(Using blue as the background color); } }如果用户指定了最喜欢的颜色就用该颜色作为背景。如果没有指定最喜欢的颜色并且今天是星期二则背景颜色为绿色。否则如果用户把年龄指定为字符串并且我们能成功把它解析为数字则颜色为紫色或橙色具体取决于这个数值。如果这些条件都不适用则背景颜色为蓝色。这种条件结构让我们能够支持复杂的需求。使用这里写死的值时这个例子会打印Using purple as the background color。你可以看到if let也可以像match一样引入遮蔽变量if let Ok(age) age这一行引入了一个新的遮蔽变量age其中包含Ok里的值。这意味着在使用上面这种嵌套写法时我们需要把if age 30放在那个块里我们想与30比较的那个遮蔽后的age只在以{大括号开始的新作用域内有效。从 Rust 2024 edition 开始let chainslet链也允许把模式匹配和布尔条件写在同一个条件里例如if let Ok(age) age age 30此时Ok(age)绑定出的变量可以在同一条链的后续部分中使用。其余详细内容可见 6.4. 简单的控制流-if let。18.1.4.while let条件循环while let和if let有点相似只要模式继续匹配它就允许while循环一直运行。看个例子let mut stack Vec::new(); stack.push(1); stack.push(2); stack.push(3); while let Some(top) stack.pop() { println!({top}); }这个例子会依次打印 3、2、1。pop方法会从向量中取出最后一个元素并返回Some(value)。如果向量为空pop返回None。只要pop返回Somewhile循环就会继续运行其块中的代码。当pop返回None时循环停止。我们可以用while let把栈中的每个元素依次弹出。18.1.5.for循环for循环是 Rust 中最常见的循环。在for循环中模式就是紧跟在for关键字后面的那个值。在for循环中直接跟在关键字for后面的值是一个模式。例如在for x in y中x就是模式。下面的例子演示了如何在for循环中使用模式来解构元组let v vec![a, b, c]; for (index, value) in v.iter().enumerate() { println!({value} is at index {index}); }输出a is at index 0 b is at index 1 c is at index 2其余信息可见 3.6. 控制流循环。18.1.6.let语句let语句也是模式其语法是let PATTERN EXPRESSION;看个例子let (x, y, z) (1, 2, 3);我们将元组与模式进行匹配。Rust 会把值(1, 2, 3)与模式(x, y, z)比较并发现该值与模式匹配于是把1绑定到x把2绑定到y把3绑定到z。你可以把这个元组模式看成其中嵌套了三个单独的变量模式。18.1.7. 函数参数函数参数也可以是模式。看个例子fn foo(x: i32) { // ... }其中的x部分就是一个模式。正如我们对let所做的那样我们也可以在函数参数中把元组与模式进行匹配。例如fn print_coordinates((x, y): (i32, i32)) { println!(Current location: ({x}, {y})); } fn main() { let point (3, 5); print_coordinates(point); }
协同过滤技术在个性化阅读推荐中的应用背景 随着信息技术的迅猛发展,互联网上的内容呈现爆炸式增长,用户在面对海量信息时往往难以高效获取符合自身兴趣的内容。传统的阅读推荐系统通常基于热门排行榜或简单的内容分类,难以满足用户个性化的需…
📅 2026/7/23 19:00:04
18.2 可辩驳性:模式是否会无法匹配
18.2.1. 模式的两种形式
模式有两种形式:
- 可辩驳的(refutable),意味着它们可能匹配失败
- 无可辩驳的(irrefutable),意味着它们不会失败&#x…
📅 2026/7/23 19:00:03
一、VB Frontier AI Model API 定价对比图(2026 年 7 月底短名单)Google 给三款新模型的定价,落在全球主流 AI 模型中低区间——但token 用量本身就低,意味着企业在标价之外还能再省一截(任何价位下,token 用得少就付得少)。Gemini 3.6 Flash 定价:输入 1.50/输出7.50 (每百万 …
📅 2026/7/23 19:00:01
1. 项目概述与POM模块的核心价值在嵌入式系统开发,尤其是工业控制、汽车电子这类对实时性和可靠性要求极高的领域,我们经常面临一个经典难题:如何在不中断系统运行、不重新烧录整个固件的前提下,快速、安全地调整运行中的关键参数…
📅 2026/7/23 20:13:38
1. 项目概述与ePWM核心价值在嵌入式系统,尤其是电机控制、数字电源和逆变器领域,脉冲宽度调制(PWM)技术是连接数字世界与模拟功率世界的桥梁。我们常说的PWM,本质上是利用数字信号(通常是微控制器的一个引脚…
📅 2026/7/23 20:13:38
在Hadoop YARN中,容器(Container)是YARN用来运行应用程序的抽象单位。YARN调度器(Scheduler)负责为应用程序分配资源,包括CPU、内存等,以运行这些容器。以下是YARN调度器如何分配容器的几个关键…
📅 2026/7/23 20:13:38
更多请点击:
https://intelliparadigm.com
第一章:紧急预警!3款热门AI音乐工具正悄悄修改用户协议:你的生成音频版权可能已不属于你(附2024年7月最新条款逐条比对) 近期,Suno AI、Udio 和 Soun…
📅 2026/7/23 20:13:38
在Hadoop YARN中,处理大文件或进行大数据处理时,有时需要将大文件切割成小块,以提升数据处理效率和并行度。YARN本身并不直接提供文件切分的工具,但可以通过几种方式来实现这一需求,特别是在使用MapReduce或Spark等框架…
📅 2026/7/23 20:13:38
说实话,以前我对 geo tar 这玩意儿真没太当回事。觉得不就是把一堆地理数据塞进个压缩包里嘛,能有多难?直到去年接了个外包项目,给一个做智慧城市的朋友处理历史测绘数据,我才算是真正领教了什么叫“数据灾难”。那哥们儿之前为了省事,直接拿普通的 zip 工具把几百个 shp…
📅 2026/7/23 20:13:00
更多请点击:
https://intelliparadigm.com
第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…
📅 2026/7/23 0:00:26
最近好多同行在群里问 geo s1230 到底值不值得买。说实话,这机器在二手市场挺火。但水很深,新手很容易踩雷。我干了十年设备维护,见过太多冤大头。今天不扯虚的,直接上干货。先说价格,心里得有底。目前成色不错的二手货,大概在一万二到一万五之间。如果低于八千,别犹豫,…
📅 2026/7/23 0:01:16
更多请点击:
https://codechina.net
第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现࿱…
📅 2026/7/23 0:01:26
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/23 1:06:38
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/23 1:06:38
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/23 1:06:38
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/23 7:06:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/23 17:07:28
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/23 5:06:50