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
我可以在布尔值上使用的组合器?
有一个方法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)