Rust系统编程之枚举

1.无类型枚举定义

枚举给予你将一个值成为一个集合之一的方法。比如,我们想让 Rectangle 是一些形状的集合,包含 CircleTriangle

1
2
3
4
5
6
7
enum Rectangle {
Circle,
Triangle,
}

let c:Rectangle = Rectangle::Circle;
let t:Rectangle = Rectangle::Triangle;

2.带可变类型的枚举

对于圆来说,只需要一个半径r的属性,而对于矩形来说,需要有长宽的属性。

1
2
3
4
5
6
7
enum Rectangle {
Circle(u32),
Triangle(u32, u32),
}

let c:Rectangle = Rectangle::Circle(1);
let t:Rectangle = Rectangle::Triangle(2, 3);

3.枚举的成员函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum SomeStructField {
A(T1),
B(T2),
C(T3),
}

impl SomeStructField {
pub fn unwrap_a(self) -> T1 {
match self {
SomeStructField::A(v) => v,
_ => panic!("not A"),
}
}

/* etc, etc */
}

4.Option与NULL

1
2
3
4
5
6
7
8
9
10
11
enum Option<T> {
None,
Some(T),
}

pub const fn unwrap(self) -> T {
match self {
Some(val) => val,
None => panic("called `Option::unwrap()` on a `None` value"),
}
}

对Option类型进行unwrap()时会出现两种情况:

  • 如果为None,并没有一个有效的值
  • 如果为Some(T),会得到T值本身

这样就可以区分返回的Option是否是一个不为空的。


Rust系统编程之枚举
http://helloymf.github.io/2023/04/12/rust-xi-tong-bian-cheng-zhi-mei-ju/
作者
JNZ
许可协议