MLm*_*aze 1 enums pattern-matching rust
是否可以对枚举的变体进行通配符,同时仍然计算其关联数据?
enum BAR {
BAR1,
BAR2,
}
enum BAZ {
BAZ1,
BAZ2,
BAZ3,
}
enum FOO {
FOO1(BAR, BAZ),
FOO2(BAR, BAZ),
FOO3(BAR, BAZ),
//...
}
impl FOO {
pub fn getBar(&self) -> &BAR {
return match self {
FOO::FOO1(bar, _) => bar,
// _(bar, _) => bar,
}
}
}
Run Code Online (Sandbox Code Playgroud)
枚举 FOO 有 50 多个变体。该产品线FOO::FOO1(bar, _) => bar,满足了我的需要,但列出所有 50 个变体会非常难看,因为所有手臂基本上看起来都一样。是否存在某种形式的_(bar, _) => bar,变体被通配符但相关数据仍然可检索的情况?
是否存在某种形式的 _(bar, _) => bar,其中变体被通配,但相关数据仍然可检索?
不,你可以通过宏来实现这一点,仅此而已。
但我不得不说,我质疑你的结构:如果你有“超过 50 个变体”,所有变体都具有完全相同的关联数据,为什么它不是一个包含 3 个字段的结构?
struct Foo {
discriminant: Whatever,
bar: Baz,
baz: Baz,
}
Run Code Online (Sandbox Code Playgroud)
bar这与您手头上的内容完全相同,只是访问和并不麻烦baz。