### 定数値として扱う
enum Color { Red = 0x0000FF, Green = 0x00FF00, Blue = 0xFF0000, } fn main(){ let color = Color::Red; println!("{}", color as usize); }
### 特定の値を指定しない時
enum Color { Red, Green, Blue, } fn main(){ let color = Color::Red as usize; println!("{}", color); }
### 値を持つ列挙型
enum Color { RGB(u8, u8, u8), RGBA(u8, u8, u8, u8), } fn main(){ let c = Color::RGB(0, 0, 255); let code = match c { Color::RGB(r, g, b) => b as u32 + ((g as u32) << 8) + ((r as u32) << 16), Color::RGBA(r, g, b, _) => b as u32 + ((g as u32) << 8) + ((r as u32) << 16), }; println!("{}", code); }
### 値を持つenumを比較
#[derive(Debug,PartialEq)] enum Animal { Dog(String), Cat(String), Monkey(String), } fn main(){ let taro1 = Animal::Dog(String::from("Taro")); let taro2 = Animal::Dog(String::from("Taro")); assert_eq!(taro1, taro2); let taro3 = Animal::Cat(String::from("Taro")); let taro4 = Animal::Dog(String::from("Taro")); assert_eq!(taro3, taro4); let taro5 = Animal::Monkey(String::from("Taro")); let taro6 = Animal::Monkey(String::from("Taro")); // println!(taro5 as usize, taro6 as usize); }
値を持つ、持たないで扱いが異なるのね。。
列挙型と構造体は何となく似ているが、列挙型は名前を列挙していくだけなので、型指定はしない。