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));