1.无类型枚举定义
枚举给予你将一个值成为一个集合之一的方法。比如,我们想让 Rectangle
是一些形状的集合,包含 Circle
和 Triangle
。
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"), } }
}
|
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是否是一个不为空的。