### 定数値として扱う
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);
}
値を持つ、持たないで扱いが異なるのね。。
列挙型と構造体は何となく似ているが、列挙型は名前を列挙していくだけなので、型指定はしない。