解包选项的最简单方法,如果 None(无论如何),则 return 出错

Simplest way to unwrap an option and return Error if None (Anyhow)

我正在使用 Anyhow 并具有 returns 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()

我通常对此没有意见,但想知道这是否是最简单(最简洁)的方式来做我想做的事情(w/o 牺牲性能)?

你应该使用 context (playground):

use anyhow::{Context, Result};

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