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

구조체

마찬가지로, struct는 다음과 같이 구조 분해될 수 있습니다:

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

    // 구조체의 값을 변경하여 어떤 일이 일어나는지 확인해 보세요
    let foo = Foo { x: (1, 2), y: 3 };

    match foo {
        Foo { x: (1, b), y } => println!("x의 첫 번째는 1이고, b = {}, y = {} 입니다", b, y),

        // 구조체를 구조 분해하고 변수 이름을 바꿀 수 있으며, 순서는 중요하지 않습니다
        Foo { y: 2, x: i } => println!("y는 2이고, i = {:?}입니다", i),

        // 그리고 일부 변수를 무시할 수도 있습니다:
        Foo { y, .. } => println!("y = {}이며, x는 신경 쓰지 않습니다", y),
        // 이것은 에러를 발생시킵니다: 패턴에 `x` 필드가 언급되지 않았습니다
//Foo { y } => println!("y = {}", y),
    }

    let faa = Foo { x: (1, 2), y: 3 };

    // 구조체를 구조 분해하기 위해 반드시 match 블록이 필요한 것은 아닙니다:
    let Foo { x : x0, y: y0 } = faa;
    println!("외부: x0 = {x0:?}, y0 = {y0}");

    // 구조 분해는 중첩된 구조체에서도 작동합니다:
    struct Bar {
        foo: Foo,
    }

    let bar = Bar { foo: faa };
    let Bar { foo: Foo { x: nested_x, y: nested_y } } = bar;
    println!("중첩됨: nested_x = {nested_x:?}, nested_y = {nested_y:?}");
}

참고:

구조체