Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

열거형

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)은 필요하지 않습니다.
    }
}

참고:

#[allow(...)], 컬러 모델enum