结构体

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

另请参阅:

结构体