在 Rust 中返回枚举的最后一个元素作为默认值

co2f2e

我有一个如下的 rust 实现,在默认实现中,对于枚举,我需要返回最后一个元素,我需要在不对其进行硬编码的情况下实现它。

#[cfg_attr(feature = "std", derive(Debug))]
#[derive(Clone,  PartialEq, Eq)]
pub enum Region<CountryId> {
    None,
    Category(CountryId),
}

#[cfg_attr(feature = "std", derive(Debug))]
#[derive(Clone, PartialEq, Eq)]
pub struct Litrature1<CountryId> {
    pub Seek: Region<CountryId>,
    pub Write: Region<CountryId>,
}

#[cfg_attr(feature = "std", derive(Debug))]
#[derive(Clone, PartialEq, Eq)]
pub struct Litrature2<CountryId> {
    pub Seek: Region<CountryId>,
    pub Write: Region<CountryId>,
    pub Work: Region<CountryId>,
}

#[cfg_attr(feature = "std", derive(Debug))]
#[derive(Clone,  PartialEq, Eq)]
pub enum Alphabets<CountryId> {
    A1(Litrature1<CountryId>),
    A2(Litrature1<CountryId>)
}


impl<CountryId> Default for Alphabets<CountryId> {
    fn default() -> Self {
        // How to return the last element of the enum as default?
        Alphabets<CountryId>::A2
    }
}

操场

我不确定如何进行这项工作

罗根迷思

我假设您基本上希望一直使用默认值,其中每个区域默认为Region::None. 在这种情况下,定义Default每个嵌套类型最有意义,例如

默认为 Region

impl<CountryId> Default for Region<CountryId> {
    fn default() -> Self {
        Region::None
    }
}

默认为 Litrature1

impl<CountryId> Default for Litrature1<CountryId> {
    fn default() -> Self {
        Litrature1 {
            Seek: Default::default(),
            Write: Default::default(),
        }
    }
}

默认为 Litrature2

impl<CountryId> Default for Litrature2<CountryId> {
    fn default() -> Self {
        Litrature2 {
            Seek: Default::default(),
            Write: Default::default(),
            Work: Default::default(),
        }
    }
}

默认为 Alphabets

impl<CountryId> Default for Alphabets<CountryId> {
    fn default() -> Self {
        Alphabets::A2(Default::default())
    }
}

在 Rust 操场上

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章