Tôi có một enum:
enum Operation {
Add,
Subtract,
}
impl Operation {
fn from(s: &str) -> Result<Self, &str> {
match s {
"+" => Ok(Self::Add),
"-" => Ok(Self::Subtract),
_ => Err("Invalid operation"),
}
}
}
Tôi muốn đảm bảo tại thời điểm biên dịch rằng mọi biến thể enum được xử lý trong from
hàm.
Tại sao tôi cần cái này? Ví dụ: tôi có thể thêm một Product
thao tác và quên xử lý trường hợp này trong from
hàm:
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"),
}
}
}
Có thể đảm bảo rằng biểu thức khớp trả về mọi biến thể của enum không? Nếu không, cách tốt nhất để bắt chước hành vi này là gì?