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