열거형
enum도 비슷하게 구조 분해됩니다:
// 단 하나의 변체만 사용되므로 경고를 억제하기 위해 `allow`가 필요합니다.
#[allow(dead_code)]
enum Color {
// 이 세 가지는 오직 이름으로만 지정됩니다.
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!("이것은 무슨 색인가요?");
// `match`를 사용하여 `enum`을 구조 분해할 수 있습니다.
match color {
Color::Red => println!("빨간색입니다!"),
Color::Blue => println!("파란색입니다!"),
Color::Green => println!("초록색입니다!"),
Color::RGB(r, g, b) =>
println!("빨강: {}, 초록: {}, 파랑: {}!", r, g, b),
Color::HSV(h, s, v) =>
println!("색상: {}, 채도: {}, 명도: {}!", h, s, v),
Color::HSL(h, s, l) =>
println!("색상: {}, 채도: {}, 밝기: {}!", h, s, l),
Color::CMY(c, m, y) =>
println!("청록: {}, 자주: {}, 노랑: {}!", c, m, y),
Color::CMYK(c, m, y, k) =>
println!("청록: {}, 자주: {}, 노랑: {}, 검정: {}!",
c, m, y, k),
// 모든 변체를 검사했으므로 다른 팔(arm)은 필요하지 않습니다.
}
}