如何通过名称获取枚举值



我知道如何在Java中执行此操作。

我似乎需要实现TryFrom或类似的东西。

enum ROMAN {
I = 1,
V = 5,
X = 10,
L = 50,
C = 100,
D = 500,
M = 1000
}

我想通过枚举名称获取值。

println!("{:?}", ROMAN::valueOf("M")); // It should be `1000`

手动实现FromStrTryFrom,或者使用类似enum_derive的功能来提供这些功能。

或者只需在枚举中添加一个定制的value_of方法,而不必考虑特征。

或者做所有的事情,尽管这看起来有点像

impl Roman {
pub fn value_of(s: &str) -> Option<Self> {
Some(match s {
"I" => Self::I,
"V" => Self::V,
"X" => Self::X,
"L" => Self::L,
"C" => Self::C,
"D" => Self::D,
"M" => Self::M,
_ => return None,
})
}
}
impl FromStr for Roman {
type Err = (); // should probably provide something more useful
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::value_of(s).ok_or(())
}
}
impl TryFrom<&str> for Roman {
type Error = ();
fn try_from(s: &str) -> Result<Self, Self::Error> {
Self::value_of(s).ok_or(())
}
}
println!("{:?}", ROMAN::valueOf("M")); // It should be `1000`

它永远不会是1000,因为Rust不是这样工作的。您需要处理错误,然后将成功值转换为判别式。

最新更新