-
多种类型的集合体,一个类型的变量可以存储多种类型的值,枚举的每一项都是该枚举类型的变体:
enum IpAddrKind { V4, V6, } fn main() { route(IpAddrKind::V4); route(IpAddrkind::V6); } fn route(kind: IpAddrKind) { // ... }
-
枚举的每一个变体都可以直接包含数据,并且每一个变体可以包含不同的数据类型和不同的数量,甚至可以直接放结构体(也可以是匿名的)。
struct Ipv4Addr { // --snip-- } enum IpAddr { V4(Ipv4Addr), V6(String), } let home = IpAddr::V4(127, 0, 0, 1); let loopback = IpAddr::V6(String::from("::1")); struct Message { Quit, Move{ x: i32, y: i32 }, // anonymous struct Write(String), ChangeColor(i32, i32, i32), // three i32 values }
-
枚举也可以通过
impl
实现方法impl Message { fn call(&self) { match self { // ... } } } let m = Message::Write(String::from("hello")); m.call();
-
Option
enum Option<T> { Some(T), None, }
由于
Option
很重要,所以已经在prelude
包含,也就是说无需使用Option::
前缀就可以直接使用Some
和None
let some_number = Some(5); let some_number: Option<i32> = Some(5); let some_number: Option<i32> = Option<i32>::Some(5); let some_number: Option<i32> = None; let some_number: Option<i32> = Option::None;