列舉

enum 關鍵字可建立具有幾個不同變體的型別:

fn generate_random_number() -> i32 {
    // Implementation based on https://xkcd.com/221/
    4  // Chosen by fair dice roll. Guaranteed to be random.
}

#[derive(Debug)]
enum CoinFlip {
    Heads,
    Tails,
}

fn flip_coin() -> CoinFlip {
    let random_number = generate_random_number();
    if random_number % 2 == 0 {
        return CoinFlip::Heads;
    } else {
        return CoinFlip::Tails;
    }
}

fn main() {
    println!("You got: {:?}", flip_coin());
}

重點:

  • 列舉可讓您在單一類別中收集一組值。
  • This page offers an enum type CoinFlip with two variants Heads and Tails. You might note the namespace when using variants.
  • 這或許是比較結構體和列舉的好時機:
    • 無論使用何者,都能取得沒有欄位的簡易版本 (單元結構體),或是具有不同欄位型別的版本 (變體負載)。
    • 無論使用何者,相關函式都會在 impl 區塊中定義。
    • 您甚至可以使用獨立的結構體實作列舉的不同變體,但比起在列舉中定義全部變體的情況,這麼做會讓變體的型別有所不同。