구조체
마찬가지로, 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:?}");
}