構造体
以下のようにして、構造体も同様にデストラクトすることができます。
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!("First of x is 1, b = {}, y = {} ", b, y),
// 構造体をデストラクトして変数をリネーム。
// 順番は重要ではありません。
Foo { y: 2, x: i } => println!("y is 2, i = {:?}", i),
// 一部の変数を無視することもできます。
Foo { y, .. } => println!("y = {}, we don't care about 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!("Outside: 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: nested_x = {nested_x:?}, nested_y = {nested_y:?}");
}