如何将Rust中的Option<&u8>转换为u8?附代码求助
解决Option<&u8>转u8并打印的问题
你的代码存在几处问题,下面是修正方案和说明:
- 首先删掉
let out_of_range = &v[100];这行,直接索引越界会触发panic,完全没必要保留,我们只需要v.get(100)返回的Option<&u8>即可。 match的模式写法错误,Some(&u8)是非法语法,需要匹配具体变量名来获取内部值。- 打印时要使用匹配到的具体值,而非原
Option变量。
基础修正版本
fn main() { let v: Vec<u8> = vec![1, 2, 3, 4, 5]; let out_of_range = v.get(100); match out_of_range { // 匹配引用并解引用为u8 Some(&val) => println!("data exists: {}", val), None => println!("bruh"), } }
更简洁的写法
可以用copied()方法直接把Option<&u8>转为Option<u8>,后续处理更直观:
fn main() { let v: Vec<u8> = vec![1, 2, 3, 4, 5]; let out_of_range = v.get(100).copied(); match out_of_range { Some(val) => println!("data exists: {}", val), None => println!("bruh"), } }
无需区分Some/None的场景
如果只想直接获取值或默认值,用unwrap_or一步到位:
fn main() { let v: Vec<u8> = vec![1, 2, 3, 4, 5]; let val = v.get(100).copied().unwrap_or(0); println!("value: {}", val); }
内容的提问来源于stack exchange,提问作者bruh
相关产品推荐
相关产品推荐

