Ich habe eine Aufzählung:
enum Operation {
Add,
Subtract,
}
impl Operation {
fn from(s: &str) -> Result<Self, &str> {
match s {
"+" => Ok(Self::Add),
"-" => Ok(Self::Subtract),
_ => Err("Invalid operation"),
}
}
}
Ich möchte beim Kompilieren sicherstellen, dass jede Enum-Variante in der from
Funktion behandelt wird.
Warum brauche ich das? Zum Beispiel könnte ich eine Product
Operation hinzufügen und vergessen, diesen Fall in der from
Funktion zu behandeln:
enum Operation {
// ...
Product,
}
impl Operation {
fn from(s: &str) -> Result<Self, &str> {
// No changes, I forgot to add a match arm for `Product`.
match s {
"+" => Ok(Self::Add),
"-" => Ok(Self::Subtract),
_ => Err("Invalid operation"),
}
}
}
Kann garantiert werden, dass der Übereinstimmungsausdruck jede Variante einer Aufzählung zurückgibt? Wenn nicht, wie kann dieses Verhalten am besten nachgeahmt werden?