Rust 中枚举的通配符和解构

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,变体被通配符但相关数据仍然可检索的情况?

Mas*_*inn 7

是否存在某种形式的 _(bar, _) => bar,其中变体被通配,但相关数据仍然可检索?

不,你可以通过宏来实现这一点,仅此而已。

但我不得不说,我质疑你的结构:如果你有“超过 50 个变体”,所有变体都具有完全相同的关联数据,为什么它不是一个包含 3 个字段的结构?

struct Foo {
    discriminant: Whatever,
    bar: Baz,
    baz: Baz,
}
Run Code Online (Sandbox Code Playgroud)

bar这与您手头上的内容完全相同,只是访问和并不麻烦baz