Rust中无需解包Option实现Option枚举转Option整数的优雅方法是什么?
解决方案
你可以直接用Option::map处理这个场景,它天生就适配「对Option中的有效值做转换、原样保留None状态」的逻辑,完全可以替代你写的样板化match代码:
enum SomeEnum { Item1 = 0, Item2 = 1 } fn main() { let value = Some(SomeEnum::Item1); let option_integer: Option<i16> = value.map(|e| e as i16); }
如果你需要频繁把这个枚举转为整数,可以提前为枚举实现From trait统一转换逻辑,后续调用更简洁:
enum SomeEnum { Item1 = 0, Item2 = 1 } impl From<SomeEnum> for i16 { fn from(e: SomeEnum) -> Self { e as i16 } } fn main() { let value = Some(SomeEnum::Item1); let option_integer: Option<i16> = value.map(Into::into); }
报错原因说明
你之前直接对Option<SomeEnum>调用into()转换失败,是因为Rust标准库不会默认为所有内层可转换的Option自动实现跨类型的From/Into trait,必须手动处理Option外层容器,map是这类场景下最轻量化的处理方式。
内容的提问来源于stack exchange,提问作者Fellow Rustacean
相关产品推荐
相关产品推荐

