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