解包选项的最简单方法,如果 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)
}
我正在使用 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)
}