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:?}");
}

関連項目:

構造体