Types 我如何习惯性地将bool转换为选项或导致生锈?

Types 我如何习惯性地将bool转换为选项或导致生锈?,types,casting,rust,type-conversion,Types,Casting,Rust,Type Conversion,似乎没有办法使用std进行这样的单行转换 我不喜欢这种长篇大论: 匹配我的布尔值{ true=>Ok(()), false=>Err(MyError::false), } 我想使用单衬里,例如: 让my_bool=true; 让my_option=my_bool.to_option(MyObject{});//true=>MyObject{},false=>None 让my_result=my_bool.to_result(MyObject{},MyError{});//true=>MyObj

似乎没有办法使用
std
进行这样的单行转换

我不喜欢这种长篇大论:

匹配我的布尔值{
true=>Ok(()),
false=>Err(MyError::false),
}
我想使用单衬里,例如:

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

最短的代码是什么?

这个答案有点过时了。从Rust 1.50开始,您可以使用内置的
bool::then
。有关更多信息,请参阅下面的其他答案


有一个问题。它定义了for
bool
,添加了两个有用的方法。例如:

use boolinator::Boolinator;

my_bool.as_some(MyObject {});                // Option<MyObject>
my_bool.as_result(MyObject {}, MyError {});  // Result<MyObject, MyError>
使用boolinator::boolinator;
我的兄弟是一些(我的对象{});/选项
my_bool.as_result(MyObject{},MyError{});//结果
true
值导致
Some(
Ok(
),而
false
值导致
None
Err(

RFCs存储库中有一个错误,但它看起来不会很快发生。

这样做:

让my_bool=true;
让my_option=my_bool.then_some(MyObject{});
让my_result=my_bool.then_some(MyObject{}).ok_或(MyError{});

在撰写本文时,这仍然是实验功能的一部分。

使用
if
表达式:

if my_bool{Ok(())}else{Err(MyError::False)}

从Rust 1.50开始,您可以使用:

assert\u eq!(假。那么(| | val),无);
断言!(对。然后(| | val),一些(val));
您可以通过链接将其转换为
结果

assert\u eq!(false.then(| | val)。ok|u或(err),err(err));
断言!(对。然后(| | val)。好的(呃),好的(val));
在夜间,您可以直接使用和传递值,而不是创建闭包:

#![功能(bool_to_选项)]
断言!(错。然后是一些(val),没有);
断言!(对。然后_一些(val),一些(val));
或者,您可以使用:

assert\u eq!(一些(obj).filter(| | false),无);
断言!(Some(obj).filter(| | | true).ok|u或(err),ok(obj));