ys memos

Blog

Rustのenumにdefault値を持たせる


rust

2024/01/28


Rustのenumには、default値を持たせることができる。 その方法のスニペットを紹介。


以下のようにすると目的を果たすことができる。

#[derive(Debug, Default)]
enum Level {
    #[default]
    Low,
    High,
}

impl<S: AsRef<str>> From<S> for Level {
    fn from(s: S) -> Self {
        match s.as_ref() {
            "low" => Level::Low,
            "high" => Level::High,
            _ => Default::default(),
        }
    }
}

fn main() {
    let low = Level::from("low");
    println!("{:?}", low);
    let high = Level::from(String::from("high"));
    println!("{:?}", high);
}

derive(Default)Default::defaultを自動実装するためには、デフォルトにしたいバリアントに#[default]をつけることでデフォルト値を指定する。

記事の主題とは異なるが、From::fromの実装のように、デフォルトの値を使いたい場合は、Default::default()を記述しておけば、将来的にデフォルト値が変わった時にコードを変更しなくても自動でそれに追従することができる。



関連タグを探す