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
枚举有两个变体:V4
和V6
。V4
变体存储四个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
: 用于表示整个类型的值范围,例如..
在整数类型上。