7.5.1.2 enums
enum도 유사하게 역구조화 된다:
// `allow`는 하나의 변수만 사용되는 것에 대한 경고를 생략시키는데 필요하다.
#[allow(dead_code)]
enum Color {
// 이 3개는 그들의 이름 자체로 열거됩니다.
Red,
Blue,
Green,
// 이들도 유사하게 `u32`튜플을 다른 이름들:컬러 모델로 결집한다.
RGB(u32, u32, u32),
HSV(u32, u32, u32),
HSL(u32, u32, u32),
CMY(u32, u32, u32),
CMYK(u32, u32, u32, u32),
}
fn main() {
let color = Color::RGB(122, 17, 40);
// TODO ^ `color`에 다른 변수명을 사용해보세요.
println!("What color is it?");
// `enum`은 `match`를 사용해 역구조화 할 수 있다.
match color {
Color::Red => println!("The color is Red!"),
Color::Blue => println!("The color is Blue!"),
Color::Green => println!("The color is Green!"),
Color::RGB(r, g, b) =>
println!("Red: {}, green: {}, and blue: {}!", r, g, b),
Color::HSV(h, s, v) =>
println!("Hue: {}, saturation: {}, value: {}!", h, s, v),
Color::HSL(h, s, l) =>
println!("Hue: {}, saturation: {}, lightness: {}!", h, s, l),
Color::CMY(c, m, y) =>
println!("Cyan: {}, magenta: {}, yellow: {}!", c, m, y),
Color::CMYK(c, m, y, k) =>
println!("Cyan: {}, magenta: {}, yellow: {}, key (black): {}!",
c, m, y, k),
// 모든 변수가 검토되었기 때문에 이 외에 범위가 필요하지 않다.
}
}