定義Enum的完整語法

enum創建枚舉類型有多種方式,其每個成員的定義都類似於創建Struct結構的語法。

例如:


#![allow(unused)]
fn main() {
enum E {
  F1,             // 該成員類似於unit-like struct
  F2(i32, u64),   // 該成員類似於tuple struct
  F3{x: i32, y: u64}, // 該成員類似於named struct
}
}

F1成員這種定義方式自無需再多做介紹,前文定義的枚舉類型都是這種類型的成員。

F2成員的定義類似於tuple struct,F2成員包含兩個字段,這兩個字段類型分別是i32和u64。也就是說,枚舉類型E的F2成員,是一個包含了具體數據的成員。

F3成員的定義類似於named struct,F3成員包含x和y兩個字段,字段類型分別是i32和u64。也就是說,枚舉類型E的F3成員,也是一個包含了具體數據的成員。

正是因為枚舉類型允許定義F2和F3這種包含數據的成員,使得枚舉類型在Rust中扮演的角色變得更為重要。

例如,Rust要實現一個Json解析工具,只需定義一個枚舉類型去枚舉Json允許的數據類型,參考如下代碼。


#![allow(unused)]
fn main() {
enum Json {
  Null,
  Boolean(bool),
  Number(f64),
  String(String),
  Array(Vec<Json>),
  Object(Box<HashMap<String, Json>>),
}
}

不可否認,Rust語言的表達能力很強。例如這裡的枚舉類型,僅僅這樣一個簡單的數據結構就表達出很多內容,而在其它語言中,這可能需要定義很多方法來表達出這些內容。