構造体
同様に、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:?}"); }