前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【技术布局】rust编程:从unwrap开始解惑

【技术布局】rust编程:从unwrap开始解惑

原创
作者头像
blueflyming
发布2025-01-07 17:34:10
发布2025-01-07 17:34:10
1150
举报

在rust编程中,经常在代码中会写.unwrap(),最开始只是抄代码,对这块的设计并不了解,最近代码写的比较多,开始对这一块有了新的理解。

一、Resut

一般来说,当我拥有一个Result对象的时候,他会有两种可能的结果,一个是正常的返回值,另一个是异常情况,就像他的定义一样:Result<T,E>,其中T表示正常的返回值,E表示程序异常时候的异常信息,一般我们用Ok()和Err()来创建Result对象的值。而unwrap()就是对于Result对象进行解包,获取里面的T值,但是如果在unwrap时,Result是Error值,那么就会触发panic。

代码语言:rust
复制
let result:Result<i32,String> = Ok(123);
let value = result.unwrap();

let result :Result<i32,String> = Err("Error".to_string());
let value = result.unwrap();

在上述代码中,第一个result被unwrap后的值是123,但是第二个unwrap的时候就会触发panic,显示Error信息。

二、Option

在rust中Option类型也经常用到unwrap,这个类型表示一个可能为空的值,一般我们用Ok()或者None来表示它的值。如果它有值,那么在unwrap的时候就会正常返回它所表示的值,如果它不存在值,在unwrap的时候也会触发一个panic。

代码语言:rust
复制
let opt:Option<i32> = Some(123);
let value = result.unwrap();

let opt :Option<i32> = None;
let value = result.unwrap();

在上述代码中,第一个opt可以被正常unwrap(),得到结果,但是第二个opt在unwrap的时候就会触发panic,因为它是一个空值。

三、稳健使用unwrap

在实际项目开发中,盲目使用unwrap可能会导致程序运行中出现多个panic,所以推荐使用unwrap_or来返回一个默认值,或者unwrap_or_else来返回一个闭包的结果

代码语言:rust
复制
let opt = Option<i32> = None;
let val = opt.unwrap_or(111);

let opt = Option<i32> = None;
let val = opt.unwrap_or_else(|| {
       println!("opt 中不存在值!");
       123
});

上述代码中第一个opt在unwrap_or的时候,由于opt没有值,所以返回参数中的默认值,如果他有值,就会正常返回。第二个opt在unwrap_or_else的时候发现opt中没有值,就会执行参数中的闭包函数,并且将闭包函数的结果返回赋值给val。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Resut
  • 二、Option
  • 三、稳健使用unwrap
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档