和結構類似,列舉 (enum) 也是一種複合型別,列舉中的資料為程式設計者所指定的有限的數個可能性。列舉是相當實用的概念,Rust 的標準函式庫中也有許多場合使用到列舉。
建立列舉
Rust 的列舉分為兩種,一種是無資料的列舉,一種是有資料的列舉。以下實例建立無資料的列舉:
enum Day {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
}
在我們這個例子中,雖然也可以用常數 (constant) 來達成類似的效果,但用列舉較佳,因為建立列舉時,也建立了新的型別,Rust 編譯器會利用列舉的資訊幫我們檢查程式碼。
Rust 的列舉也可以帶資料,如以下實例:
pub enum Color {
RGB { r: u8, g: u8, b: u8 },
CMYK { c: f64, m: f64, y: f64, k: f64 },
HSL { h: f64, s: f64, l: f64 },
}
在 match 中使用列舉
在 match 中使用到列舉時,同樣需窮舉所有的可能性。如下:
enum Day {
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
}
fn main() {
let day = Day::Sunday;
match day {
Day::Saturday | Day::Sunday => {
println!("Relax yourself");
}
_ => {
println!("Work hardly")
}
}
}
結合資料和行為
如同結構,列舉也可以將資料和行為結合,利用物件導向的機制建立自己的型別系統。我們將於後續章節介紹相關內容。