有没有办法提取枚举的标签,例如,将其用作索引?
我想要一个按枚号类型分类的矢量矢量,即如果我有:
enum Test {
Point {
x: i32,
y: i32,
},
Point2 {
a: i32,
b: i32,
},
Number(i32),
}
我可能想要一个这样的矢量:
[[Test::Point{1, 2}, Test::Point{3, 4}], [Test::Number(1), Test::Number(2)]]
我想在给定新值的情况下动态添加到这个向量向量 . 因此,如果函数在 Test::Number
中传递,它将进入第二个数组 .
当然在最坏的情况下,我可以明确地模式匹配每个可能的联合值,但是对于大的枚举,它会变得相当冗长和重复,因为所有情况都会最终成为
match e {
Test::Point { _, _ } => v[0].push(e),
Test::Point2 { _, _ } => v[1].push(e),
Test::Number(_) => v[2].push(e),
// imagine a lot of these
}
我've tried a lot of syntax permutations, but I haven' t得到了任何可以编译的东西 . 有没有办法处理enum struct标签,比如,枚举?看起来有一个 FromPrimitive
派生,但它's unstable and doesn' t在struct枚举上工作 .
(如果你不能,我想另一个问题是你是否可以编写一个宏来自动写入匹配) .
2 回答
您可以使用
..
忽略枚举的所有字段,无论它们有多少,您可以使用use
从enum
s命名空间内导入变体 . 例如您可以在枚举中的匹配臂和方法中使用交替语法(通过
|
)来减少代码重复: