Вернуть последний элемент перечисления как Default в Rust - PullRequest
0 голосов
/ 07 марта 2019

У меня есть ржавчина реализации, как показано ниже, и в реализации по умолчанию для перечисления мне нужно вернуть последний элемент, и мне нужно достичь его без его жесткого кодирования.

#[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
    }
}

Playground

Я не знаю, как сделать эту работу

1 Ответ

1 голос
/ 07 марта 2019

Я предполагаю, что вы, по сути, хотите, чтобы значения по умолчанию были на всем пути вниз, где каждый регион по умолчанию равен 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 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...