rust 中unwrap_or和unwrap_or_else区别

unwrap_or和unwrap_or_else在处理Result对象时有所不同。当Result是Ok时,两者都返回Ok的值。如果Result是Err,unwrap_or返回预先设定的默认值,而unwrap_or_else则执行提供的闭包并返回其结果。在需要静态默认值时使用unwrap_or,需要动态计算默认值时使用unwrap_or_else。
摘要由CSDN通过智能技术生成

unwrap_orunwrap_or_else 都是用于从 Result 对象中获取值的宏。

Result 对象是 Ok 时,两者都会返回 Ok 中的值。但是当 Result 对象是 Err 时,两者的行为不同:

  • unwrap_or 将返回一个默认值。这个默认值是宏的参数,在调用 unwrap_or 时就已经确定了。

  • unwrap_or_else 将调用一个闭包,并返回闭包的结果。这个闭包是宏的参数,在调用 unwrap_or_else 时就已经确定了。

所以,当你想要在 Err 时使用固定的默认值时,就可以使用 unwrap_or;而当你想要在 Err 时使用可变的值时,就可以使用 unwrap_or_else

示例代码:

let x: Result<i32, &amp;str> = Err("error message");

// 使用 unwrap_or 返回默认值
let y = x.unwrap_or(0);

// 使用 unwrap_or_else 返回闭包的结果
let z = x.unwrap_or_else(|| {
    println!("error message: {}", x.unwrap_err());
    0
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值