枚举类型
根据您在前一章节中编写的验证逻辑,一张票证(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