구조체 분해(역구조화)

struct 구조체 역시 분해할 수 있습니다:

struct Foo {
    x: (u32, u32),
    y: u32,
}

#[rustfmt::skip]
fn main() {
    let foo = Foo { x: (1, 2), y: 3 };
    match foo {
        Foo { x: (1, b), y } => println!("x.0 = 1, b = {b}, y = {y}"),
        Foo { y: 2, x: i }   => println!("y = 2, x = {i:?}"),
        Foo { y, .. }        => println!("y = {y}, other fields were ignored"),
    }
}
  • foo의 리터럴 값을 다른 패턴과 일치하도록 변경합니다.
  • Foo에 새 필드를 추가하고 필요에 따라 패턴을 변경합니다.
  • 캡처와 상수 표현식은 구분하기 어려울 수 있습니다. 두 번째 부문의 2를 변수로 변경해 보고 작동하지 않는 것을 확인하세요. const로 변경하고 다시 작동하는지 확인합니다.