似乎没有办法用std进行这样的一行转换.

我不喜欢这种长篇大论:

match my_bool {
    true => Ok(()),
    false => Err(MyError::False),
}

我想使用单衬垫,例如:

let my_bool = true;
let my_option = my_bool.to_option(MyObject{}); // true => MyObject{}, false => None
let my_result = my_bool.to_result(MyObject{}, MyError{}); // true => MyObject{}, false => MyError{}

最短的代码是什么?

推荐答案

This answer is somewhat outdated.从Rust 1.50开始,你可以使用内置的bool::then.有关更多信息,请参见下面的其他答案.


这是boolinator crate.它为bool定义了the extension trait Boolinator,增加了一些有用的方法.例子:

use boolinator::Boolinator;

my_bool.as_some(MyObject {});                // Option<MyObject>
my_bool.as_result(MyObject {}, MyError {});  // Result<MyObject, MyError>

true表示Some(_)Ok(_)false表示NoneErr(_).

RFCs存储库中有一个issue about adding functionality like this to std,但它看起来不会很快发生.

Rust相关问答推荐

在Rust中创建可变片段的可变片段的最有效方法是什么?

如何容器化Linux上基于Rust的Windows应用程序的编译过程?

创建包含缺失值的框架

使用Py03从Rust调用Python函数时的最佳返回类型

为什么AsyncRead在Box上的实现有一个Unpin特征绑定?

减少指示ProgressBar在Rust中的开销

`actix-web` 使用提供的 `tokio` 运行时有何用途?

类型生命周期绑定的目的是什么?

将 &str 或 String 保存在变量中

返回优化后的标题:返回异步块的闭包的类型擦除

枚举的利基优化如何在 Rust 中工作?

Rust 中的 Option as_ref 和 as_deref 有什么不同

为什么 Rust 的临时值有时有参考性有时没有?

没有得到无法返回引用局部变量`queues`的值返回引用当前函数拥有的数据的值的重复逻辑

如何在 Rust 中将 bson::Bson 转换为 Vec

从现有系列和 map 值创建新系列

发生移动是因为 `data` 的类型为 `Vec`,它没有实现 `Copy` 特性

将文件的第一行分别读取到文件的其余部分的最有效方法是什么?

将 (T, ()) 转换为 T 安全吗?

如果返回类型是通用的,我可以返回 &str 输入的一部分吗?