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: 用于表示整个类型的值范围,例如 .. 在整数类型上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482339.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办&#xff0c;作为紫光展锐年度盛会&#xff0c;吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年&#xff0c;共同面向5G、AI和卫星通信为代表的前沿科技&#xff0c;聚焦技术…

本地学习axios源码-如何在本地打印axios里面的信息

1. 下载axios到本地 git clone https://github.com/axios/axios.git 2. 下载react项目, 用vite按照提示命令配置一下vite react ts项目 npm create vite my-vue-app --template react 3. 下载koa, 搭建一个axios请求地址的服务端 a.初始化package.json mkdir koa-server…

7、递归

一、概念/理解 递归&#xff1a;某个函数直接或者间接的调用自身。--->函数调用 函数调用&#xff1a;创建副本 递归函数&#xff1a;直接或者间接调用自身的函数叫 递归函数: 边界条件/递归出口&#xff1a;递归调用的终止条件。避免出现死循环或者爆栈的情况。//报错显…

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

【青牛科技】2K02 电动工具专用调速电路芯片描述

概述&#xff1a; 2K02 是电动工具专用调速电路。内置稳压电路&#xff0c;温度系数好&#xff0c;可以调节输出频率以及占空比的振荡输出&#xff0c;广泛的应用于小型电钻&#xff0c;割草机等工具。 主要特点&#xff1a; ● 电源电压范围宽 ● 占空比可调 ● 温度系数好 …

内网穿透步骤

步骤 第一次需要验证token window和linux的方法不同。 然后 启动 cpolar 服务&#xff1a; 在命令窗口中输入 cpolar.exe htttp 8080&#xff0c;启动内网穿透服务。确保命令窗口保持开启状态&#xff0c;以维持穿透效果。 cpolar.exe hhttp 8080 成功后 注意事项 命令窗口…

FreeRTOS之vTaskStartScheduler实现分析

FreeRTOS之vTaskStartScheduler实现分析 1 FreeRTOS源码下载地址2 函数接口2.1 函数接口2.2 函数参数简介3 vTaskDelete的调用关系3.1 调用关系3.2 调用关系示意图 4 函数源码分析4.1 vTaskStartScheduler4.2 prvCreateIdleTasks4.2.1 prvCreateIdleTasks4.2.2 xTaskCreate 4.3…

基于群晖搭建个人图书架-TaleBook based on Docker

前言 在群晖Container Manager中部署失败&#xff0c;转通过ssh部署。 一、准备工作 名称备注群晖SSH“终端机和SNMP”中启用SSH软件secureCRT等docker-compose.ymlGithub下载并修改 二、过程 2.1 创建本地文件夹 本地路径为&#xff1a; /docker/Calibre/data 2.2 下载d…

Ubuntu24.04初始化教程(包含基础优化、ros2)

将会不断更新。但是所有都是基础且必要的操作。 为重装系统之后的环境配置提供便捷信息来源。记录一些错误的解决方案。 目录 构建系统建立系统备份**Timeshift: 系统快照和备份工具****安装 Timeshift****使用 Timeshift 创建快照****还原快照****自动创建快照** 最基本配置换…

【论文笔记】A Token-level Contrastive Framework for Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: A Token-level Contrastiv…

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时&#xff1a;可能会出现以下报错&#xff1a; This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…

基于springboot中小型制造企业质量管理系统源码和论文

信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古以来的…

【实验13】使用预训练ResNet18进行CIFAR10分类

目录 1 数据处理 1.1 数据集介绍 1.2数据处理与划分 2 模型构建- Pytorch高层API中的Resnet18 3 模型训练 4 模型评价 5 比较“使用预训练模型”和“不使用预训练模型”的效果&#xff1a; 6 模型预测 7 完整代码 8 参考链接 1 数据处理 1.1 数据集介绍 数据规模&…

Java之链表1

文章目录 1. 链表1.11.2 链表的概念及其结构1.3 自己实现一个链表 1. 链表 1.1 之前我们学习了 顺序表ArrayList&#xff0c;并自己实现了 ArrayList &#xff0c;发现它在删除元素和添加元素时很麻烦&#xff0c;最坏的情况时&#xff0c;需要将所有的元素移动&#xff0c;因…

二分搜索(三)x的平方根

69. x 的平方根 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2…

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库&#xff0c;它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题&#xff0c;能够帮助用户快速创建出具有吸引力的统计图表&#xff0c;用于数据分析和…

使用docker-compose部署搜索引擎ElasticSearch6.8.10

背景 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它被广泛用于实时数据搜索、日志分析、全文检索等应用场景。 Elasticsearch 支持高效的全文搜索&#xff0c;并提供了强大的聚合功能&#xff0c;可以处理大规模的数据集并进行快速…

LeetCode—74. 搜索二维矩阵(中等)

仅供个人学习使用 题目描述&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true…

Cento7 紧急模式无法正常启动,修复home挂载问题

Centos 7 开机失败进入紧急模式[emergency mode]&#xff0c;解决方案。 通过journalctl -xb查看启动日志&#xff0c;定位发现/home目录无法正常挂载。 退出启动日志检查&#xff0c;进行修复。 进行问题修复 # 修复挂载问题 mkdir /home mount /dev/mapper/centos-home /ho…

Matlab mex- setup报错—错误使用 mex,未检测到支持的编译器...

错误日志&#xff1a; 在使用mex编译时报错提示&#xff1a;错误使用 mex&#xff0c;未检测到支持的编译器。您可以安装免费提供的 MinGW-w64 C/C 编译器&#xff1b;请参阅安装 MinGW-w64 编译器。有关更多选项&#xff0c;请访问https://www.mathworks.com/support/compile…