是否有一个组合器用于根据布尔条件返回结果?

tur*_*tle 5 error-handling boolean rust

对于选项类型,我经常使用ok_or组合器返回如下错误:

let my_vec = [1,2,3];

let head = my_vec.first().cloned().ok_or(Error::MyError)?;
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的组合器或方法来处理布尔值而不是选项类型。例如:

let my_vec = [1,2,3];
let head = my_vec.is_empty().false_or(Error::MyError)?;
Run Code Online (Sandbox Code Playgroud)

我经常编写匹配来处理这个问题,但它看起来相当冗长:

let vec_is_ok = match my_vec.is_empty() {
    true => Err(...),
    false => Ok(())
}
vec_is_ok?;
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的方法来编写类似于ok_or我可以在布尔值上使用的组合器?

Pet*_*all 9

有一个方法bool::then(在 Rust 1.50.0 中添加),返回一个Option<T>可以转换为Result<T, E>.

你的例子看起来像这样:

use std::ops::Not;

my_vec.is_empty().not().then(|| ()).ok_or(MyError)
Run Code Online (Sandbox Code Playgroud)