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{}
_
それをするための最短コードは何ですか?
std
を使用してこのような1行の変換方法がないようです。
実際には、Option
が filter
この正確な目的のための方法:
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(_)
につながります。
if
式を使用してください。
if my_bool { Ok(()) } else { Err(MyError::False) }
_