열거형 분해(역구조화)

구조체나 열거형 값의 일부를 패턴 매치를 통해 변수에 바인딩할 수 있습니다. 간단한 enum 타입을 먼저 살펴보겠습니다:

enum Result {
    Ok(i32),
    Err(String),
}

fn divide_in_two(n: i32) -> Result {
    if n % 2 == 0 {
        Result::Ok(n / 2)
    } else {
        Result::Err(format!("cannot divide {n} into two equal parts"))
    }
}

fn main() {
    let n = 100;
    match divide_in_two(n) {
        Result::Ok(half) => println!("{n} divided in two is {half}"),
        Result::Err(msg) => println!("sorry, an error happened: {msg}"),
    }
}

match구문에서 divide_in_two함수에서 반환되는 Result 값을 두 개의 팔(혹은 가지)로 분해(destructure) 하였습니다. 첫번째 팔에서 halfOk variant에 담긴 값으로 바인딩됩니다. 두번째 팔에서 msg는 오류 메시지 문자열에 바인딩됩니다.

키 포인트:

  • if/else 표현식은 열거형을 반환하고, 이 값은 나중에 match로 분해됩니다.
  • 열거형에 세번째 variant를 추가하고 코드를 실행하여 오류를 표시해보세요. 코드 어느 부분에 누락이 있는지, 그리고 컴파일러가 어떤 식으로 힌트를 주는지 같이 살펴보세요.