私は数にstr
を解析し、それを返すか、エラーResultを使用してエラー以外の関数をラップする慣習的な方法は何ですか?
fn parse_str<T: FromStr>(text: &str) -> Result<T, SaleError> {
match text.parse::<T>() {
Ok(value) => Ok(value),
_ => Err(SaleError::new(6010, 1999)),
}
}
SaleError
は私のカスタムのエラー構造体である機能を持っています。
解析した後、数値がis_sign_positive()
で正であるかどうかを確認するなど、結果値に他のチェックを行いたい場合は、Err(SaleError)
を発行します。
私がやっただけbool
is_sign_positive()
戻ると、この関数を作成しましたので:
fn is_positive(number: f64) -> Result<f64, SaleError> {
match number.is_sign_positive() {
true => Ok(number),
false => Err(SaleError::new(6010, 1999)),
}
}
今、私はそのようにそれを使用することができます:これは素晴らしい作品
let value1 = try!(parse_str::<f64>("123").and_then(is_positive)
.or(Err(SaleError::new(6010, 1465))));
let value2 = try!(parse_str::<f64>("321").and_then(is_positive)
.or(Err(SaleError::new(6010, 5000))));
が、なおvalue1
とvalue2
の特定のSaleError
インスタンスが必要なので、or()
関数を使用しました。
私は常にis_positive
が私に戻ってくるのではなく、特定のエラーが欲しいので、is_sign_positive()
をラップすることができるので、関数is_positive
を作成する必要はありません。
そのような何か:
let value1 = try!(parse_str::<f64>("123").check_if(|n| n.is_sign_positive())
.or(Err(SaleError::new(6010, 1465))));
も参照してくださいhttp://stackoverflow.com/q/ 41384597/155423 – Shepmaster