enum 枚举类型
我们可以通过定义枚举IpAddrKind
来表达这样的概念,声明该枚举需要列举出所有可能的IP
地址种类,也就是所谓的枚举变体(variant
)。
enum IpAddrKind {
V4,
V6,
}
枚举的变体全部位于其标识符的命名空间中,并使用两个冒号来将标识符和变体分隔开。由于IpAddrKind::V4
和IpAddrKind::V6
拥有相同的类型IpAddrKind
,所以我们可以定义一个接收IpAddrKind
类型参数的函数来统一处理它们。
现在的定义只知道枚举的种类,却没有办法去存储实际的IP
地址数据,只能起到一个标识的作用。但实际上,枚举允许我们在变体上嵌套数据。在新的IpAddr
枚举变体中,V4
和V6
两个变体都被关了上了一个String
值:
enum IpAddr {
V4(String),
V6(String),
}
你可以在枚举的变体中嵌入任意类型的数据,无论是字符串、数组、还是结构体,甚至可以嵌入另一个枚举!
虽然枚举变体是不同的类型,但对外而言,它们是单独的一个类型。
Option
枚举
RUST
中虽然没有空值,但却提供了一个拥有类似概念的枚举,我们可以用它来标识一个值无效或者缺失,这个枚举就是Option<T>
,它在标准库中的定义如下:
enum Option<T> {
Some(T),
None,
}
由于Option<T>
枚举非常常见,所以它被包含在了预导入模块中,这意味着我们不需要显示地将它引入作用域。