rust 如何实现整数枚举的From< u8>

mxg2im7a  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(257)

带有:

enum Foo {
  Bar,
  Doe,
}

我希望能够通过let doe: Foo = 1.into()创建Foo的示例。现在我尝试实现From<u8>,但似乎无法使匹配工作。
下面的简单代码不起作用:

match b {
  Foo::Doe as u8 => Foo::Doe,
}

如何才能轻松匹配所有枚举变体?

zbsbpyhn

zbsbpyhn1#

如果你想用“简单”的匹配方式,你必须意识到显然不是每个u8都能Map到你的枚举的一个变体上,因此你不能使用From,而应该使用TryFrom

match b {
  1 => Ok(Bar),
  2 => Ok(Doe), 
  _ => Err(whatever_error_type_you_use)
}

但是,如果您不想以一种普通的方式来完成,您可以使用像https://crates.io/crates/int-enum这样的自定义板条箱

相关问题