首页 > 解决方案 > 展开选项并返回错误的最简单方法(如果没有)(无论如何)

问题描述

我正在使用Anyhow并且有一个返回的函数anyhow::Result。在该函数中,我想“解包”一个选项,以便如果选项值为None,则返回带有特定错误消息的错误。这就是我所做的:

let o: Option<i32> = ...;
let v: i32 = o.ok_or_else(|| anyhow!("Oh, boy!"))?;
// here I need v only

我已经使用ok_or_else()而不是ok_or()出于性能原因。

我通常对此很好,但想知道这是否是做我想做的最简单(最简洁)的方法(不牺牲性能)?

标签: rusterror-handling

解决方案


你应该使用context操场):

use anyhow::{Context, Result};

fn _foo(o: Option<i32>) -> Result<i32> {
    let v = o.context("Oh, boy!")?;
    Ok(v)
}

推荐阅读