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