假设我有一个枚举
实际上,字段可能会更长,既难以记忆,也难以输入。我现在想编写针对(变体)`E` 的函数。然而,我很懒,不想重复自己,在析构枚举时明确声明每个使用的字段。
直觉上,我希望绑定运算符 `@` 可以在这里起作用,但它只绑定整个枚举 `e`,而不是给定的变体 `E::A`。
实现以下意图的最短/最优雅的方法是什么?
E
,它可能是自动生成的或不受我的控制,包含许多变量,每个变量都有若干字段。enum E {
A {
x1: u8,
x2: u8,
x3: u8,
// ...
x9: u8,
},
B,
}
实际上,字段可能会更长,既难以记忆,也难以输入。我现在想编写针对(变体)`E` 的函数。然而,我很懒,不想重复自己,在析构枚举时明确声明每个使用的字段。
直觉上,我希望绑定运算符 `@` 可以在这里起作用,但它只绑定整个枚举 `e`,而不是给定的变体 `E::A`。
实现以下意图的最短/最优雅的方法是什么?
fn f(e: &E) {
match e {
bad @ E::A { .. } => dbg!(bad.x1),
_ => {}
}
}
*更新,因为这已经在两个答案中提出,我不想与E::A { x1, .. }
匹配,因为当需要多个具有较长名称的字段时,这将变得很烦琐。在下面的示例中,我必须在我的代码中两次输入some_other_field_with_an_impossibly_long_name
(一次绑定它,一次使用它),而在假设的bad @ E::A
情况下,我只需要输入它一次。
match e {
E::A { some_field_with_a_long_name, some_other_field_with_an_impossibly_long_name, yet_another_field, .. } => dbg!(some_other_field_with_an_impossibly_long_name),
_ => {}
}