Rust 中的 enum
在 Rust 中,很多函数的返回值都是 enum(枚举),特别是 Option<T>
和 Result<T, E>
这两种 enum,所以这里简单介绍一下 enum 的用法。
和在其他语言一样,Rust 中的 enum 也能够作为结构体的一部分(通常用于表示类型的 type
或 kind
字段)使用,例如,
enum IpAddrKind {
V4,
V6,
}
struct IpAddr {
kind: IpAddrKind,
address: String,
}
这里的 V4
和 V6
都是 enum IpAddrKind
的成员(variant,可看作是一种可能的结果)。
而不同于其他语言的地方在于,Rust 还能够将数据直接放进成员中,或者说将任意的类型关联到 enum 的成员中。例如,
enum IpAddr {
V4(String),
V6(String),
}
let localhost = IpAddr::V4(String::from("127.0.0.1"));
IpAddr::V4(String::from("127.0.0.1"))
看起来像函数调用,但实际上是 IpAddr
这个 enum 的一个成员,其类型为IpAddr
,关联了一个字符串类型的值。
enum Option<T>
是 Rust 标准库内置的一个 enum。Option
类型代表一种非常普遍的场景,即要么有值且类型为 T
——对应 Some(T)
成员,要么没值——对应 None
成员(类似其他语言中的空值 null
或 nil
等)。
enum Option<T> {
Some(T),
None,
}
enum Result<T, E>
是 Rust 中另一个十分常用的 enum。成员 Ok(T)
表示成功的结果(类型为 T
),成员 Err(E)
表示错误(类型为 E
)。
enum Result<T, E> {
Ok(T),
Err(E),
}