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

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


文章目录

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

1. 枚举

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

1.1基础

枚举语法格式

rust 复制代码
enum IpAddrKind {
    V4(u8, u8, u8, u8),
    V6(String),
}

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

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

rust 复制代码
let home = IpAddrKind::V4(127, 0, 0, 1);
let loopback = IpAddrKind::V6(String::from("::1"));

1.2 给枚举变体起个"别名"

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

rust 复制代码
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表达式一起使用,以便根据枚举值的不同执行不同的代码块:

rust 复制代码
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中,半开区间范围使用..语法表示。

rust 复制代码
let start = 1;
let end = 5;
for number in start..end {
    println!("{}", number);
}

输出结果

复制代码
1
2
3
4

2.3 包含范围的语法糖

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

rust 复制代码
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)来跳过某些值

rust 复制代码
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: 用于表示整个类型的值范围,例如 .. 在整数类型上。
相关推荐
love530love12 分钟前
【PyCharm必会基础】正确移除解释器及虚拟环境(以 Poetry 为例 )
开发语言·ide·windows·笔记·python·pycharm
凌辰揽月14 分钟前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
UestcXiye1 小时前
Rust 学习笔记:关于智能指针的练习题
rust
普宁彭于晏1 小时前
元素水平垂直居中的方法
前端·css·笔记·css3
whoarethenext2 小时前
C++ OpenCV 学习路线图
c++·opencv·学习
m0_637146932 小时前
计算机网络基础总结:TCP/IP 模型、TCP vs UDP、DNS 查询过程
笔记·tcp/ip·计算机网络
恰薯条的屑海鸥2 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
网络·学习·安全·web安全·渗透测试
Lester_11012 小时前
嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
笔记·学习
moxiaoran57534 小时前
uni-app学习笔记二十三--交互反馈showToast用法
笔记·学习·uni-app
scdifsn11 小时前
动手学深度学习12.7. 参数服务器-笔记&练习(PyTorch)
pytorch·笔记·深度学习·分布式计算·数据并行·参数服务器