当前位置: 首页 > news >正文

Rust学习笔记_07——枚举和范围

Rust学习笔记_04——引用
Rust学习笔记_05——控制流(1)
Rust学习笔记_06——控制流(2)


文章目录

    • 1. 枚举
      • 1.1基础
      • 1.2 给枚举变体起个“别名”
      • 1.3 枚举与匹配(match)
    • 2. 范围
      • 2.1 介绍
      • 2.2 半开区间范围
      • 2.3 包含范围的语法糖
      • 2.4 步长范围(Range with Step)
      • 2.5 Range 类型

1. 枚举

Rust语言中的枚举(enum)是一种强大的数据类型,允许你定义一个变量,这个变量可以是几种不同类型的值之一。枚举在很多编程语言中都存在,但Rust的枚举格外灵活,因为它不仅可以包含简单的值,还可以包含元组或结构体作为其变体(variant)。这使得枚举成为Rust中表达多种可能状态或类型的强大工具。

1.1基础

枚举语法格式

enum IpAddrKind {V4(u8, u8, u8, u8),V6(String),
}

IpAddrKind枚举有两个变体:V4V6V4变体存储四个u8值(代表IPv4地址的四个八位字节),而V6变体存储一个String(代表IPv6地址)。

使用中可以通过指定变体的相应的值来创建枚举实例:

let home = IpAddrKind::V4(127, 0, 0, 1);
let loopback = IpAddrKind::V6(String::from("::1"));

1.2 给枚举变体起个“别名”

可以使用type关键字来给某个变体指定一个更方便的类型别名

enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(i32, i32, i32),
}type Point = Message::Move;let msg = Message::Move { x: 10, y: 20 };
let point: Point = msg; // 这里将Message::Move类型转换为Point类型

1.3 枚举与匹配(match)

枚举常与match表达式一起使用,以便根据枚举值的不同执行不同的代码块:

fn print_ip(ip: IpAddrKind) {match ip {IpAddrKind::V4(a, b, c, d) => {println!("IPv4 address: {}.{}.{}.{}", a, b, c, d);}IpAddrKind::V6(s) => {println!("IPv6 address: {}", s);}}
}

2. 范围

2.1 介绍

Rust语言中的范围(Range)是一种用于生成数字序列或进行迭代操作的表达式。Rust提供了两种主要类型的范围:半开区间范围(half-open range)和步长范围(range with step)。这些范围在for循环和其他上下文中都非常有用。

2.2 半开区间范围

半开区间范围是最常见的范围类型,它表示从起始值到但不包括结束值的一系列数值。在Rust中,半开区间范围使用..语法表示。

let start = 1;
let end = 5;
for number in start..end {println!("{}", number);
}

输出结果

1
2
3
4

2.3 包含范围的语法糖

虽然标准的半开区间范围不包括结束值,但Rust提供了..=语法糖来包含结束值,这称为包含范围(inclusive range)。

let start = 1;
let end = 5;
for number in start..=end {println!("{}", number);
}

输出结果

1
2
3
4
5

2.4 步长范围(Range with Step)

除了标准的范围,Rust还允许你指定一个步长(step)来跳过某些值

for number in (1..=10).step_by(2) {println!("{}", number);
}

输出结果

1
3
5
7
9

2.5 Range 类型

Rust标准库提供了几个类型来表示范围:

  • std::ops::Range<T>: 用于表示半开区间范围,例如 1..5
  • std::ops::RangeInclusive<T>: 用于表示包含范围,例如 1..=5
  • std::ops::RangeFrom<T>: 用于表示从某个值到无穷大的范围,例如 1..
  • std::ops::RangeTo<T>: 用于表示从负无穷大到某个值的范围,例如 ..5
  • std::ops::RangeFull: 用于表示整个类型的值范围,例如 .. 在整数类型上。

相关文章:

Rust学习笔记_07——枚举和范围

Rust学习笔记_04——引用 Rust学习笔记_05——控制流(1) Rust学习笔记_06——控制流(2) 文章目录 1. 枚举1.1基础1.2 给枚举变体起个“别名”1.3 枚举与匹配&#xff08;match&#xff09; 2. 范围2.1 介绍2.2 半开区间范围2.3 包含范围的语法糖2.4 步长范围&#xff08;Range …...

40分钟学 Go 语言高并发:服务性能调优实战

服务性能调优实战 一、性能优化实战概述 优化阶段主要内容关键指标重要程度瓶颈定位收集性能指标&#xff0c;确定瓶颈位置CPU、内存、延迟、吞吐量⭐⭐⭐⭐⭐代码优化优化算法、并发、内存使用代码执行时间、内存分配⭐⭐⭐⭐⭐系统调优调整系统参数、资源配置系统资源利用率…...

Windows通过指令查看已安装的驱动

Windows通过指令查看已安装的驱动 在 Windows 操作系统中&#xff0c;有几种命令可以用来查看已安装的驱动程序。以下是常见的几种方法&#xff1a; 1. 使用 pnputil 查看已安装驱动程序 pnputil 是一个 Windows 内置工具&#xff0c;可以列出所有已安装的驱动程序包。 命令…...

Windows 11 如何配置node.js

一&#xff0c;官网下载 官网首页 下载最新LTS版本&#xff0c;比较稳定&#xff0c;如果想探索更新的版本去探索新的nodejs功能。 1. 下载完成后&#xff0c;双击运行程序&#xff0c;点击next 2. 勾选接受协议&#xff0c;点击next 3. 选择自己的安装路径&#xff08;默认是…...

AWTK fscript 中的 串口 扩展函数

fscript 是 AWTK 内置的脚本引擎&#xff0c;开发者可以在 UI XML 文件中直接嵌入 fscript 脚本&#xff0c;提高开发效率。本文介绍一下 fscript 中的 ** 串口 扩展函数 ** 1.iostream_serial_create 创建串口输入输出流对象。 原型 iostream_serial_create(device) > ob…...

yolov11剪枝

思路&#xff1a;yolov11中的C3k2与yolov8的c2f的不同&#xff0c;所以与之前yolov8剪枝有稍许不同&#xff1b; 后续&#xff1a;会将剪枝流程写全&#xff0c;以及增加蒸馏、注意力、改loss&#xff1b; 注意&#xff1a; 1.在代码105行修改pruning.get_threshold(yolo.mo…...

智慧地图聚合(LockMap)标注系统开发说明文档

智慧地图聚合(LockMap)标注系统开发说明文档 1. 系统概述 智慧地图聚合(LockMap)标注系统是一个专为处理大规模地理信息数据而设计的综合解决方案。通过后端高效的数据管理和前端直观的地图展示&#xff0c;该系统能够实现对海量地理位置点的有效可视化。本项目旨在提供一个用…...

「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器

本篇将带你实现一个简单的数字滚动抽奖器。用户点击按钮后&#xff0c;屏幕上的数字会以滚动动画的形式随机变动&#xff0c;最终显示一个抽奖数字。这个项目展示了如何结合定时器、状态管理和动画实现一个有趣的互动应用。 关键词 UI互动应用数字滚动动画效果状态管理用户交…...

cuda12.1版本的pytorch环境安装记录,并添加到jupyter和pycharm中

文章目录 前置准备使用anaconda prompt创建虚拟环境创建虚拟环境激活pytorch虚拟环境把pytorch下载到本地使用pip把安装包安装到pytorch环境中进入python环境检验是否安装成功将环境添加到jupyter在pycharm中使用该环境&#xff1a; 前置准备 安装anaconda&#xff0c;我的版本…...

Linux: network: nic: mellanox MRU初现

文章目录 在PPP协议了有提到过总结-吐槽MRU初现兼容问题详细的MRU的计算幸运下面这个commit缩小了幸运机会So在PPP协议了有提到过 MRU在RFC4638里有提到。但是在Linux内核里是的Ethernet是没有相关的概念。 总结-吐槽 说Mellanox的网卡驱动在2018年做了一个对进入packet的大…...

深入理解红黑树的底层逻辑

一、红黑树的定义 红黑树是一种自平衡的二叉查找树&#xff0c;每个节点都带有额外的颜色信息&#xff0c;可以是红色或黑色。红黑树的目的是通过引入颜色信息来确保树的平衡&#xff0c;从而提高查找、插入和删除等操作的效率。 二、红黑树的性质 每个节点都有颜色&#xf…...

【数据结构】手搓链表

一、定义 typedef struct node_s {int _data;struct node_s *_next; } node_t;typedef struct list_s {node_t *_head;node_t *_tail; } list_t;节点结构体&#xff08;node_s&#xff09;&#xff1a; int _data;存储节点中的数据struct node_s *_next;&#xff1a;指向 node…...

ThinkPHP场景动态验证

一、缘由 今天在用thinkphp8写东西的时候发现&#xff0c;写验证器规则和场景优点费时间&#xff0c;就算用tinkphp的命令行生成也是生成一个空壳。内容还是要自己填写感觉麻烦。 就突发奇想能不能自动生成验证器&#xff0c;也不能是说自动生成验证器&#xff0c;生成验证其的…...

在M3上面搭建一套lnmp环境

下载docker-desktop 官网下载docker-desktop 切换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docke…...

【C++笔记】二叉搜索树

前言 各位读者朋友们大家好&#xff01;上期我们讲完了面向对象编程三大属性之一的多态&#xff0c;这一期我们再次开始数据结构二叉搜索树的讲解。 目录 前言一. 二叉搜索树的概念二. 二叉搜索树的性能分析三. 二叉搜索树的插入四. 二叉搜索树的查找五. 二叉搜索树的删除六.…...

Fork/Join框架简介

一、Fork/Join框架简介 Fork/Join框架是Java 7引入的一个用于并行执行任务的框架&#xff0c;它可以将一个大任务分割成若干个小任务&#xff0c;并行执行这些小任务&#xff0c;然后将每个小任务的结果合并起来&#xff0c;得到大任务的结果。这种框架特别适合于能够被递归分…...

Java项目实战II基于微信小程序的电子竞技信息交流平台的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的飞速发展…...

Mysql读写分离分库分表

读写分离 什么是读写分离 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话&#xff0c;就能够小幅提升写性能&#xff0c;大幅提升读性能。一般情况下&#xff0c;我们都会选择一主多从&#xff0c;也就是一台主数据库负责写&#xff0c;其他的从…...

B站狂神说--springboot项目学习(新建一个springboot项目)

文章目录 1.新建项目java8项目1.解决自带的idea2024无法使用java8的问题 2.新建接口3.项目打包为jar包4.使用jar包 1.新建项目java8项目 1.解决自带的idea2024无法使用java8的问题 将server.url修改为阿里云的地址&#xff1a;https://start.aliyun.com/ 选择Spring Web 创建…...

eltable el-table 横向 滚动条常显

又遇到了难受的问题&#xff0c;el-table嵌入在一个div里面&#xff0c;结果因为内容太多,横向、纵向我都得滚动查看&#xff01; 结果发现横向滚动时只能让它纵向触底后才能进行横向操作&#xff0c;这就很变态&#xff0c;明显不符合用户操作习惯。如下图&#xff1a; 要先纵…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...