web-dev-qa-db-ja.com

どのように私はどのように慣性的にブールをオプションに変換したり、さびの結果を引き起こしますか?

stdを使用してこのような1行の変換方法がないようです。

私はこのような冗長性が好きではありません:

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

たとえば、1つのライナーを使いたいです。

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{}
 _

それをするための最短コードは何ですか?

13
hedgar2017

stdを使用してこのような1行の変換方法がないようです。

実際には、Optionfilter この正確な目的のための方法:

let my_option = Some(MyObject{}).filter(|_| my_bool);

ChainingによるResultに変換することができます Option::ok_or

let my_result = Some(MyObject{}).filter(|_| my_bool).ok_or(MyError{}); 

true値はSome(_)またはOk(_)になりますが、false値はNoneまたはErr(_)につながります。

2
Ibraheem Ahmed

if式を使用してください。

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