Rust 中的 enum

31 阅读1分钟

Rust 中的 enum

在 Rust 中,很多函数的返回值都是 enum(枚举),特别是 Option<T>Result<T, E> 这两种 enum,所以这里简单介绍一下 enum 的用法。

和在其他语言一样,Rust 中的 enum 也能够作为结构体的一部分(通常用于表示类型的 typekind 字段)使用,例如,

enum IpAddrKind {
    V4,
    V6,
}

struct IpAddr {
    kind: IpAddrKind,
    address: String,
}

这里的 V4V6 都是 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 成员(类似其他语言中的空值 nullnil 等)。

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),
}