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

以Rust中的默认值返回枚举的最后一个元素,rust,Rust,我有一个rust实现,如下所示,在默认实现中,对于枚举,我需要返回最后一个元素,并且我需要在不硬编码的情况下实现它 #[cfg_attr(feature = "std", derive(Debug))] #[derive(Clone, PartialEq, Eq)] pub enum Region<CountryId> { None, Category(CountryId), } #[cfg_attr(feature = "std", derive(Debug))

我有一个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。在这种情况下,最好在每个嵌套类型上定义默认值,例如

区域默认值

Litrature2的默认值


字母表枚举变量每个都围绕一个LitratureX值,那么默认实现的值应该是多少?它是否应该是一个Region::None for Seek and Write的文学1?是的,这就是你可以推导出的正确答案Default@loganfsmyth我不是将最后一项硬编码为::A2,而是寻找一种动态方式来获取最后一项Thanks@mcarton不幸的是,这将要求CountryId实现默认值,因为@co2f2e需要工作吗?枚举的最后一个变体没有什么特别之处,所以它不是内置的。
impl<CountryId> Default for Region<CountryId> {
    fn default() -> Self {
        Region::None
    }
}
impl<CountryId> Default for Litrature1<CountryId> {
    fn default() -> Self {
        Litrature1 {
            Seek: Default::default(),
            Write: Default::default(),
        }
    }
}
impl<CountryId> Default for Litrature2<CountryId> {
    fn default() -> Self {
        Litrature2 {
            Seek: Default::default(),
            Write: Default::default(),
            Work: Default::default(),
        }
    }
}
impl<CountryId> Default for Alphabets<CountryId> {
    fn default() -> Self {
        Alphabets::A2(Default::default())
    }
}