列舉
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 variantsHeads
andTails
. You might note the namespace when using variants. - 這或許是比較結構體和列舉的好時機:
- 無論使用何者,都能取得沒有欄位的簡易版本 (單元結構體),或是具有不同欄位型別的版本 (變體負載)。
- 無論使用何者,相關函式都會在
impl
區塊中定義。 - 您甚至可以使用獨立的結構體實作列舉的不同變體,但比起在列舉中定義全部變體的情況,這麼做會讓變體的型別有所不同。