Rust 枚举

1. 简介

在 Rust 编程语言中,枚举(Enumeration)是一种用于列出可能的值集合的类型。这些值被称为变体(Variants)。枚举允许你在代码中表达一个值是一系列可能状态之一的概念。

2. 创建枚举

定义一个枚举,我们使用 enum 关键字,并且列出它的变体:

enum IpAddrKind {
    V4,
    V6,
}

在这个例子中,IpAddrKind 是枚举名称,而 V4V6 则是其变体。

3. 枚举值

枚举的变体可以包含数据,就像结构体那样:

enum IpAddr {
    V4(String),
    V6(String),
}

在这个例子中,我们将 IpAddrKind 枚举的每个变体都关联到了一个 String 值。

4. 使用 match 表达式匹配枚举值

由于 Rust 是一门静态类型语言,编译器需要在所有可能情况下知道变量的类型。因此,当我们处理枚举时,必须考虑到每个可能的枚举成员。match 表达式是一个控制流结构,它允许你基于枚举值运行不同代码分支:

fn main() {
    let four = IpAddr::V4;
    let six = IpAddr::V6;

    route(four);
    route(six);
}

fn route(ip_kind: IpAddr) {
    match ip_kind {
        IpAddr::V4(addr) => println!("IPv4 address: {}", addr),
        IpAddr::V6(addr) => println!("IPv6 address: {}", addr),
    }
}

在这个例子中,我们定义了一个 route 函数,它接受一个 IpAddr 类型的参数。然后使用 match 表达式来检查所提供的 IpAddr 值是变体 V4 还是变体 V6。如果 route 函数被传递了一个 IpAddr::V4 的值,则 addr 会绑定到该 IpAddr::V4 变体中存储的 String 值上,然后打印出相应的消息。同理,如果提供了一个 IpAddr::V6 值,也会执行对应代码分支。

5. Option 枚举和其他有用的枚举

Rust 标准库中包含了一个很常用的枚举:Option<T>。它定义在标准库中,而不是预置在语言中,因为它对于某些情况下非常有用,但另一些情况下则没那么有用。Option<T> 枚举表示一个值可能存在(Some)或不存在(None)的情况:

enum Option<T> {
    None,
    Some(T),
}

6. 总结

Rust 中的枚举是一个非常强大和有用的工具,它可以让你在编译时表达更多信息。使用枚举可以使代码更加清晰、安全,并且能够帮助你避免运行时错误。