Rust中如何匹配Mode枚举_B变体并返回其中的Option<usize>?
Rust代码修正:正确提取Mode::_B中的Option
修正后的完整代码
pub struct Request { _mode: Mode, } pub enum Mode { A, // _B stores the len _B(Option<usize>) } impl Request { fn get_len(&self) -> Option<usize> { match &self._mode { Mode::A => Some(0), Mode::_B(opt) => opt.clone(), } } }
错误原因分析
原代码的match分支存在核心问题:
- 匹配
_B时未捕获枚举变体内部的Option<usize>值,直接返回_B会得到&Mode类型的引用。 - 另一分支返回的
Some(0)是Option<usize>类型,两个分支类型不兼容,触发类型不匹配错误。
关键修改点
- 捕获内部值:在
match模式中使用Mode::_B(opt),将_B内部存储的Option<usize>的引用绑定到opt变量(类型为&Option<usize>)。 - 类型对齐:由于函数返回的是拥有所有权的
Option<usize>,调用opt.clone()将引用类型转换为所有权类型;如果想利用usize的Copy特性,也可以替换为opt.copied(),效果完全一致。
内容的提问来源于stack exchange,提问作者Мария Гутовская
相关产品推荐
相关产品推荐

