位元詩人 [Rust] 程式設計教學:列舉 (Enum)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

和結構類似,列舉 (enum) 也是一種複合型別,列舉中的資料為程式設計者所指定的有限的數個可能性。列舉是相當實用的概念,Rust 的標準函式庫中也有許多場合使用到列舉。

建立列舉

Rust 的列舉分為兩種,一種是無資料的列舉,一種是有資料的列舉。以下實例建立無資料的列舉:

Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. enum Day {
  2.     Sunday,
  3.     Monday,
  4.     Tuesday,
  5.     Wednesday,
  6.     Thursday,
  7.     Friday,
  8.     Saturday,
  9. }

在我們這個例子中,雖然也可以用常數 (constant) 來達成類似的效果,但用列舉較佳,因為建立列舉時,也建立了新的型別,Rust 編譯器會利用列舉的資訊幫我們檢查程式碼。

Rust 的列舉也可以帶資料,如以下實例:

Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. pub enum Color {
  2.     RGB { r: u8, g: u8, b: u8 },
  3.     CMYK { c: f64, m: f64, y: f64, k: f64 },
  4.     HSL { h: f64, s: f64, l: f64 },
  5. }

在 match 中使用列舉

在 match 中使用到列舉時,同樣需窮舉所有的可能性。如下:

Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. enum Day {
  2.     Sunday,
  3.     Monday,
  4.     Tuesday,
  5.     Wednesday,
  6.     Thursday,
  7.     Friday,
  8.     Saturday,
  9. }
  10.  
  11. fn main() {
  12.     let day = Day::Sunday;
  13.  
  14.     match day {
  15.         Day::Saturday | Day::Sunday => {
  16.             println!("Relax yourself");
  17.         }
  18.         _ => {
  19.             println!("Work hardly")
  20.         }
  21.     }
  22. }

結合資料和行為

如同結構,列舉也可以將資料和行為結合,利用物件導向的機制建立自己的型別系統。我們將於後續章節介紹相關內容。

關於作者

位元詩人 (ByteBard) 是資訊領域碩士,喜歡用開源技術來解決各式各樣的問題。這類技術跨平台、重用性高、技術生命長。

除了開源技術以外,位元詩人喜歡日本料理和黑咖啡,會一些日文,有時會自助旅行。