首页 > 其他分享 >Rust -- 模式与匹配

Rust -- 模式与匹配

时间:2023-04-26 21:35:34浏览次数:40  
标签:匹配 fn -- 模式 let Rust println match

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")
    }
}

标签:匹配,fn,--,模式,let,Rust,println,match
From: https://www.cnblogs.com/2bjiujiu/p/17357415.html

相关文章

  • As a restaurant owner, write a professional email to the supplier to get these p
    Asarestaurantowner,writeaprofessionalemailtothesuppliertogettheseproductseveryweek:Wine(x10)Eggs(x24)Bread(x12)DearSupplier,Ihopethismessagefindsyouwell.Mynameis[YourName],andIamwritingonbehalfofmyrestaurant......
  • 力扣---1031. 两个非重叠子数组的最大和
    给你一个整数数组nums和两个整数firstLen和secondLen,请你找出并返回两个非重叠子数组中元素的最大和,长度分别为firstLen和secondLen。长度为firstLen的子数组可以出现在长为secondLen的子数组之前或之后,但二者必须是不重叠的。子数组是数组的一个连续部分。 ......
  • nginx日志切割
    手动#!/bin/bashLOG_PATH="/var/log/nginx/"RECORD_TIME=$(date-d"yesterday"+%Y-%m-%d+%H:%H:%M)PID=/var/run/nginx/nginx.pidmv${LOG_PATH}/access.log${LOG_PATH}/access.${RECORD_TIME}.logmv${LOG_PATH}/error.log${LOG_PATH}/error.${R......
  • logseq 开源知识管理平台
    logseq是一个开源的知识管理平台特性任务管理pdf注释Flashcards白板同时支持不少插件说明对于希望搭建自己知识库的是一个不错的选择,同时官方的文档就是一个可以快速体验的入口参考资料https://github.com/logseq/logseqhttps://plugins-doc.logseq.com/https://hub......
  • 汇总|React Native 开发工具一赏
    传统的开发中,按照平台划分为iOS,Android,Windows和Mac。其中,随着移动设备的使用移动端应用的开发也越来越多。传统上iOS应用使用Xcode工具、Objective-C和Swift语言进行开发,Android应用使用AndroidStudio工具、Java和kotlin语言进行开发。随着开发的普及......
  • [AHK]用AutoHotkey面向对象实践“简单工厂模式”
    用面向对象编程实现一个计算器程序,要求输入两个数和运算符号,得到结果。“所有编程初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和运算符号,然后......
  • 明解STM32—GPIO应用设计篇之API函数及配置使用技巧
     一、前言本篇开始对STM32的GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍的GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。了解过STM32的GPIO相关的理论知识,这样在应用GPIO开发过程中,能更好的理解GPIO的特点,应用起来会更加的得心应手。后续将......
  • [AHK]双击托盘区某可见程序图标以激活之(为读取微信新消息定义热键)
    检索TrayIcon对应的程序,并激活为QQ激活,自定义热键win+q,实现代码如下:(注意win10下面"QQ.exe"区分大小写才可以)#q::o:=TrayIcon_GetInfo("QQ.exe")Loop,%o.MaxIndex(){WinShow%"QQahk_classTXGuiFoundationahk_pid"o[A_Index].pidWinActivate%"QQahk_cla......
  • List 集合转成Set 集合..
    ★数组转Collection使用ApacheJakartaCommonsCollections:1.import2.3."aaa","bbb","ccc"};4.new5.new6.CollectionUtils.addAll(strList,strArray);7.CollectionUtils.addAll(strSet,strArray);CollectionUtils.......
  • 双十一期间,海外企业邮箱如何注册?
    海外企业邮箱价格是外贸公司注册邮箱时要对比的,双十一期间许多企业邮箱会有优惠活动,但是如果你进行对比,对外贸企业来说还是选择ZohoMail企业邮箱划算,最重要的是它的安全级别远高于普通邮箱。海外企业邮箱如何注册呢?1.选择公司邮箱品牌行业里企业邮箱大品牌都是拥有20多年邮箱......