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()
を記述しておけば、将来的にデフォルト値が変わった時にコードを変更しなくても自動でそれに追従することができる。