rust 如何将枚举变量的字段设置为默认值而不单独分配每个字段?

e5nqia27  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(139)

假设我有一个枚举,其中每个变量都可以有自己独特的字段:

enum X {
    A { pa: bool, pb: u8, pc: u32, pd: u32 },
    B { pc: bool, pd: u8, pe: bool, pf: bool },
}

我不想使用#[derive(Default)]为类型X本身定义默认值。相反,我想将变量赋给变量,并让变量的字段设置默认值。
例如,如果选择X::A,是否有以下等效内容,而不单独列出每个字段?

let xa = X::A { pa: bool::default(), pb: u8::default(), pc: u32::default(), pd: u32::default() };
8ftvxx2r

8ftvxx2r1#

你可以创建构造函数,这样你就不需要每次都写出来。

impl X {
    pub fn a() -> Self {
        Self::A {
            pa: bool::default(),
            pb: u8::default(),
            pc: u32::default(),
            pd: u32::default(),
        }
    }
    pub fn b() -> Self {
        Self::B {
            pc: bool::default(),
            pd: u8::default(),
            pe: bool::default(),
            pf: bool::default(),
        }
    }
}

然后将它们命名为X::a()。你也可以创建常量,但是你需要用const函数或文字来构造常量。
这是关于你可以对类似结构的枚举变量做什么的限制。它们不是很符合人体工程学,所以并非巧合的是,编写复杂变量的最常见方法是使用真实的结构。

pub enum X {
    A(A),
    B(B),
}

#[derive(Default)]
pub struct A {
    pub pa: bool,
    pub pb: u8,
    pub pc: u32,
    pub pd: u32,
}

#[derive(Default)]
pub struct B {
    pub pc: bool,
    pub pd: u8,
    pub pe: bool,
    pub pf: bool,
}

impl X {
    pub fn a() -> Self {
        Self::A(A::default())
    }
    pub fn b() -> Self {
        Self::B(B::default())
    }
}

这些允许您为每个变量的内容派生默认实现,并使构造和解构枚举变得更容易。

相关问题