带有:
enum Foo { Bar, Doe, }
我希望能够通过let doe: Foo = 1.into()创建Foo的示例。现在我尝试实现From<u8>,但似乎无法使匹配工作。下面的简单代码不起作用:
let doe: Foo = 1.into()
Foo
From<u8>
match b { Foo::Doe as u8 => Foo::Doe, }
如何才能轻松匹配所有枚举变体?
zbsbpyhn1#
如果你想用“简单”的匹配方式,你必须意识到显然不是每个u8都能Map到你的枚举的一个变体上,因此你不能使用From,而应该使用TryFrom。
u8
From
TryFrom
match b { 1 => Ok(Bar), 2 => Ok(Doe), _ => Err(whatever_error_type_you_use) }
但是,如果您不想以一种普通的方式来完成,您可以使用像https://crates.io/crates/int-enum这样的自定义板条箱
1条答案
按热度按时间zbsbpyhn1#
如果你想用“简单”的匹配方式,你必须意识到显然不是每个
u8
都能Map到你的枚举的一个变体上,因此你不能使用From
,而应该使用TryFrom
。但是,如果您不想以一种普通的方式来完成,您可以使用像https://crates.io/crates/int-enum这样的自定义板条箱