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 ...
随机推荐
- [C#]接口Interface快速Demo
参考代码1: using System; namespace InterfaceDemo { /// <summary> /// 定义一个爬树接口 /// </summary> ...
- curl解决乱码
mb_convert_encoding($str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');
- 安卓自动化查看包名和activity名的方法
1,cmd下,adb shell "dumpsys window | grep mCurrentFocus" 2,CMD中输入adb logcat ActivityManager: ...
- linux查看已知进程PID所在的目录
pwdx 命令 pwdx PID [was@CMTRMWAS1 ~]$ pwdx 31996 31996: /was/AppServer/profiles/AppSrv03
- React数字滚动组件 numbers-scroll
数字滚动组件,也可以叫数字轮播组件,这个名字一听就是非常普通常见的组件,第一反应就是想找找网上大佬的东西顶礼膜拜一下,这一搜,还真是没找到趁手的╮(╯▽╰)╭. 最近接了大屏的需求,数字滚动肯定是免不 ...
- MySQL基础随笔记
[1]SQL语言入门 我们都知道,数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作,但具体是如何操作的呢?这就涉及到我们本节要讲的SQL语言.SQL ...
- Django笔记一之运行系统、创建视图并访问
从这一篇笔记开始将根据 Django 的官方文档,阅读整理之后,出一系列笔记教程,用作新手入门教程或者自己做查阅. 此次 Django 的版本为 3.2,且之后的一系列笔记都将以这个版本为基础,做功能 ...
- MyBatisPlus-------id生成策略
不同的表对应不同的id生成策略 日志:自增 购物订单:特殊规则(FQ23324AK443) 外卖单:关联地区日期等信息( 10 04 20200314 34 91) 关系表:可省略id ....... ...
- 通过使用chatgpt 逐步解决egg项目学习的一些问题【笔记】
我的需求提问 创建一个html页面,这个页面包括通过学生id查询学生详情的组件,和通过学生姓名,身份证,选择班级的组件,并把代码告诉我 chatgpt回答 好的,以下是一个包含两个组件的HTML页面, ...
- 【故障公告】数据库服务器 CPU 近 100% 造成全站故障,雪上加霜难上加难的三月
数据库服务器 CPU 近 100% 问题几乎每年都要发生一次,上次发生在去年1月31日,每次都是通过主备切换或者重启实例解决,数据库服务用的是阿里云 RDS SQL Server 2016 标准版. ...