枚举类型

根据您在前一章节中编写的验证逻辑,一张票证(ticket)只有几种有效状态:待办(To-Do)进行中(InProgress)已完成(Done)。然而,如果我们查看Ticket结构体中的status字段或new方法中status参数的类型,这一点并不明显。

#![allow(unused)]
fn main() {
#[derive(Debug, PartialEq)]
pub struct Ticket {
    title: String,
    description: String,
    status: String,
}

impl Ticket {
    pub fn new(title: String, description: String, status: String) -> Self {
        // [...]
    }
}
}

在这两种情况中,我们都使用String来表示status字段。String是一个非常通用的类型,它并不能立即传达出status字段的可能值是有限的信息。更糟糕的是,调用Ticket::new方法的用户只能在运行时发现他们提供的状态是否有效。

使用枚举(enumerations),我们可以做得更好。

enum

枚举是一种可以有固定值集合的类型,这些值被称为变体(variants)。在Rust中,你可以使用enum关键字来定义枚举:

#![allow(unused)]
fn main() {
enum Status {
    ToDo,
    InProgress,
    Done,
}
}

就像struct一样,enum也定义了一个新的Rust类型

参考资料

  • 本节的练习位于 exercises/05_ticket_v2/01_enum