Развернуть перечисление, когда все варианты одного типа - PullRequest
5 голосов
/ 19 марта 2019

Рассмотрим определение перечисления следующим образом:

enum Money {
    USD(u32),
    EUR(u32),
    CHF(u32),
    // many more...
}

Обратите внимание, что все варианты перечисления имеют тип u32.

fn amount(money: Money) -> u32 {
    // ?
}

Могу ли я в общем случае извлечь упакованный u32 содержащийсяв случае Money без сопоставления во всех случаях, если да, то как?

1 Ответ

11 голосов
/ 19 марта 2019

К сожалению, нет встроенного способа сделать это.Обычный подход заключается в создании метода доступа:

impl Money {
    pub fn amount(&self) -> u32 {
        match *self {
            Money::USD(amount) => amount,
            Money::EUR(amount) => amount,
            Money::CHF(amount) => amount,
        }
    }
}

По крайней мере, таким образом, вам нужно сделать это только один раз.

...