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 -- 模式与匹配的更多相关文章

  1. 【python cookbook】【字符串与文本】4.文本模式的匹配和查找

    问题:按照特定的文本模式进行匹配或查找 解决方法: 1.简单的文字匹配,只需使用str.find().str.startswith().str.endswith()或类似的函数即可: 2.复杂的匹配, ...

  2. oc kvc的模式:匹配搜索模式(模式匹配)、装包解包

    按照一定规则使用匹配模式在目标空间进行搜索,然后执行相应操作: 运行时系统将kvc的运行机制解释为模式匹配,将值的兼容性问题解释为装包解包问题 一.模式匹配 The default implement ...

  3. python 正则表达式与JSON-正则表达式匹配数字、非数字、字符、非字符、贪婪模式、非贪婪模式、匹配次数指定等

    1.正则表达式:目的是为了爬虫,是爬虫利器. 正则表达式是用来做字符串匹配的,比如检测是不是电话.是不是email.是不是ip地址之类的 2.JSON:外部数据交流的主流格式. 3.正则表达式的使用 ...

  4. Java 正则表达式匹配模式[贪婪型、勉强型、占有型]

    Greediness(贪婪型):最大匹配 X?.X*.X+.X{n,} 是最大匹配.例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也许 ...

  5. SQL中常用模糊查询的四种匹配模式&&正则表达式

    执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...

  6. Javascript中正则表达式的全局匹配模式

    先看一道JavaScript题目,据说是国内某知名互联网企业的JavaScript笔试题,如果对正则的全局匹配模式不了解的话可能会对下面的输出结果感到疑惑. var str = "123#a ...

  7. RegExp正则匹配模式汇总

    正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法.对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexO ...

  8. Rust入门篇 (1)

    Rust入门篇 声明: 本文是在参考 The Rust Programming Language 和 Rust官方教程 中文版 写的. 个人学习用 再PS. 目录这东东果然是必须的... 找个时间生成 ...

  9. rust语法

    目录 rust语法 前言 一.数据类型 1.1 标量scalar 1.2 复合compound 1.3 切片slice 1.4 引用(借用)reference 1.5 智能指针smart pointe ...

  10. 【译】Rust宏:教程与示例(一)

    原文标题:Macros in Rust: A tutorial with examples 原文链接:https://blog.logrocket.com/macros-in-rust-a-tutor ...

随机推荐

  1. Ubuntu VMWare安装纪要

    一.VMware虚拟机下载与安装 版本:VMware Workstation 16 Pro 二.Ubuntu下载与安装 版本:ubuntu-20.04.2.0-desktop-amd64.iso 三. ...

  2. [Cisco] IOS NAT Load-Balancing for Two ISP Connections

    interface FastEthernet0 ip address dhcp ip nat outside ip virtual-reassembly ! interface FastEtherne ...

  3. 代码还是那个代码,但我已经知道了hashmap背后的东西

    代码还是那个代码,但我已经知道了hashmap背后的东西 数据结构是链表的数组(注:后面的版本为了提升性能,已经是改成链表或者树(节点较多)了) 思想上是空间换时间的算法 构造函数上有容量和负载因子2 ...

  4. Java中简单易懂的HashMap面试题(面试必备)

    这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣 如果有什么不对的地方还望大佬指点 HashMap的底层是数组+链表,(很多人应该都知道了) JDK1.7的是数组+链 ...

  5. Mac 系统下 xxx.py 在终端运行

    1.在文件中添加注释首先在你所要运行的python文件里首行添加一个特殊的注释(我使用的是python 3.7.3) #!/usr/bin/env python3 注意:如果是python3的话,&q ...

  6. SQL SERVER 2014 双机热备操作流程-数据库双向同步 (第二篇:订阅)

    1.登录从服务器数据库,从数据库左侧菜单栏找到->复制->本地订阅->右击新建订阅->选择查找SQL Server 发布服务器,数据库服务器名称要是主服务器计算机名称,输入登录 ...

  7. EVE如何提升名望值

    目录 背景介绍 简介 名望值划分 军团名望值 利弊 背景介绍 ​ 玩eve将近3个星期,开着毒蜥级刷1级代理人任务感觉没有一点难度,想尽快刷3.4级代理任务,而我目前能够接到的最高代理任务也就才1级. ...

  8. 转发:All in one:项目级 monorepo 策略最佳实践

    0. 前言 在最近的项目开发中,出现了一个令我困扰的状况.我正在开发的项目 A,依赖了已经线上发布的项目 B,但是随着项目 A 的不断开发,又需要不时修改项目 B 的代码(这些修改暂时不必发布线上), ...

  9. Python第九章实验报告

    一.实验对象:<零基础学Python>第九章异常处理及程序调试的实例 二.实验环境:IDLE Shell 3.9.7 三.实验目的:了解和掌握常用的异常处理语句 四.实验过程: 实例01 ...

  10. WSL安装Ubuntu 22.04 (2)

    1.安装系统环境 1.1.设置软件包源为国内镜像 参考:Ubuntu更换国内镜像源 - 知乎 1.2.更新系统软件包 sudo apt-get update && sudo apt-g ...