Rust -- 模式与匹配
1. 模式
用来匹配类型中的结构(数据的形状),结合 模式和match表达式 提供程序控制流的支配权
- 模式组成内容
- 字面量
- 解构的数组、枚举、结构体、元祖
- 变量
- 通配符
- 占位符
流程:匹配值 --> 是否拥有正确的数据 --> 运行特定的代码
2. 使用模式的位置
- match分支:由match关键字、一个匹配的值和一个或多个分支构成
- 穷尽性:所有可能的值都必须考虑到
- _: 匹配所有情况,不绑定任何变量
enum Status {
// 其中对应的值通过 Status::OK as i32方式取出
OK = 200,
NotFound = 404,
Create = 201
}
fn main() {
let status = Status::OK;
match status {
// 将枚举
Status::OK => println!("{}", Status::OK as i32),
_ => println!()
}
}
- if let 语句
只关心一种情况的match分支的简写,可选的else在模式不匹配时执行,可以灵活搭配 else if 、else if let,搭配之间不需要关联性
- while let 条件循环
只要模式匹配就一直进行while循环
fn main() {
let mut stack = Vec::new();
// 推入数据
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
// 弹出数据
while let Some(v) = stack.pop() {
println!("value: {}", v)
}
}
- for循环
模式是for关键字直接跟随的值
fn main() {
let valuse = vec![1, 2, 3, 4, 5];
// 遍历vector,使用了模式对元祖进行解构
for (index, value) in valuse.iter().enumerate() {
println!("index: {}, value: {}", index, value)
}
}
- let 语句
将模式与表达式进行比较,并为任何找到的名称赋值
fn main() {
// 结构元祖
let (x, y, z) = (1, 2, 3);
println!("{}, {}, {}", z, y, x);
// 普通变量声明
let x = 5;
}
- 函数参数
与let语句一致
fn function_pattern(&(x, y): &(i32, i32)) -> i32 {
x + y
}
fn main() {
let num = (1, 2);
let sum = function_pattern(&num);
println!("sum: {}", sum)
}
3. 模式分类
依据:是否会匹配可能失败
- 不可反驳: 能匹配任何传递的可能值
- let语句 for循环 函数
- 可反驳: 对某些可能存在的值进行匹配会失败
- if let、 while let、match分支
4. 模式语法
- 匹配字面量
fn main() {
let name = "beimen";
match name {
"beimen" => println!("beimen"),
"chuixue" => println!("chuixue"),
_ => println!("unknown")
}
}
Rust -- 模式与匹配的更多相关文章
- 【python cookbook】【字符串与文本】4.文本模式的匹配和查找
问题:按照特定的文本模式进行匹配或查找 解决方法: 1.简单的文字匹配,只需使用str.find().str.startswith().str.endswith()或类似的函数即可: 2.复杂的匹配, ...
- oc kvc的模式:匹配搜索模式(模式匹配)、装包解包
按照一定规则使用匹配模式在目标空间进行搜索,然后执行相应操作: 运行时系统将kvc的运行机制解释为模式匹配,将值的兼容性问题解释为装包解包问题 一.模式匹配 The default implement ...
- python 正则表达式与JSON-正则表达式匹配数字、非数字、字符、非字符、贪婪模式、非贪婪模式、匹配次数指定等
1.正则表达式:目的是为了爬虫,是爬虫利器. 正则表达式是用来做字符串匹配的,比如检测是不是电话.是不是email.是不是ip地址之类的 2.JSON:外部数据交流的主流格式. 3.正则表达式的使用 ...
- Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...
- SQL中常用模糊查询的四种匹配模式&&正则表达式
执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...
- Javascript中正则表达式的全局匹配模式
先看一道JavaScript题目,据说是国内某知名互联网企业的JavaScript笔试题,如果对正则的全局匹配模式不了解的话可能会对下面的输出结果感到疑惑. var str = "123#a ...
- RegExp正则匹配模式汇总
正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法.对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexO ...
- Rust入门篇 (1)
Rust入门篇 声明: 本文是在参考 The Rust Programming Language 和 Rust官方教程 中文版 写的. 个人学习用 再PS. 目录这东东果然是必须的... 找个时间生成 ...
- rust语法
目录 rust语法 前言 一.数据类型 1.1 标量scalar 1.2 复合compound 1.3 切片slice 1.4 引用(借用)reference 1.5 智能指针smart pointe ...
- 【译】Rust宏:教程与示例(一)
原文标题:Macros in Rust: A tutorial with examples 原文链接:https://blog.logrocket.com/macros-in-rust-a-tutor ...
随机推荐
- .NET 5 WPF 配置文件变动 程序自动刷新 (reloadOnChange)
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extens ...
- 简单的继承练习——疑问:私有属性在类的方法内调用时,有必要使用get,set方法嘛?
要求: 创建一个Circle类,设置半径属性和返回面积的方法,在无参构造器中初始化半径值为1. 创建一个Cylinder类,继承Circle类,设置属性高和返回体积的方法,在无参构造器中初始化长度为1 ...
- 微信小程序 真机调试白屏
真机调试白屏,报define is not defined 解决: 更新小程序版本
- EL_获取域中存储的值_ List 集合&Map集合值和EL _ empty 运算符&隐式对象 pageContext
3.获取对線. List 集合. Map 集合的值 1.对線:${域名称,键名.属性名}本质上会去调用对線的 getter 方法 2. List 集合:${域名称.键名[索引]} List list ...
- 关于C#的async和await
1.async 与 await需要同时出现在方法中 如下图所示 public static async Task b() { await Task.Run(() => { //Thread.S ...
- gogetssl申请的域名证书私钥文件丢了,可以重新申请个吗?
因为gogetssl是不保存我们使用浏览器生成的KEY文件的,CSR文件倒是可以有办法再找到 也就是说Certificate Signing Request(CSR)可以想想办法,但是Your Pri ...
- Oracle-登录的用户名和密码大小写敏感
Oracle-登录的用户名和密码大小写敏感
- GPU Skinning
这个工具的作用是同一种角色在同屏里面出现一大堆时,可以大幅度的降低DrawCall.我试了一下,感觉挺有意思的,各位可以试试.它的原理实际上是把骨骼矩阵存在配置文件里面,然后通过特殊的shader,计 ...
- FastReport OpenSource发布到Linux上的准备
一.安装libgdiplus(libgdiplus是一个Mono库,用于对非Windows操作系统提供GDI+兼容的API) apt-get install build-essential lib ...
- 抽风的Maven、maven插件及配置
Idea 配合 Maven使用中有时遇到莫名奇妙的问题,又莫名奇妙的恢复正常.整理如下: 1.删除系统环境变量Maven_Home,只需在IDEA中指定Maven及settings.xml即可. 有时 ...