try!
マクロ以外の例外メカニズムの実装の延期を発表しました
try!
Rustプログラミング言語の最初のリリース後、無期限に
Result
と入力します。
これは、Rust 1.0にはファーストクラスの例外が存在しないことを意味します。つまり、言語の他の機能と完全に統合されています。
Rustでの現在のエラー処理には、
Result { Ok(value), Err(why) }
タイプ
Result { Ok(value), Err(why) }
およびマクロ
try!
。
Result
タイプは列挙型で、
Option { Some(value), None }
に似ており、意味が関連しています。 オプションタイプのオプション
None
、値がないことを示し、タイプ
Result
オプション
Err(why)
、値が存在しない理由を指定します。
Rustは、戻り値または値を返すことができなかった理由を渡すために、関数から
Result
型を返すことを提案しています。 マクロ
try!
また、別の関数の呼び出しが失敗した場合(タイプが
Result
オブジェクトに適用される場合
Err(why)
、現在の関数から
Err(why)
を自動的に返すことができます。
これはコードでどのように見えるかです:
enum MathError { DivisionByZero } // , fn div(x: f64, y: f64) -> Result<f64, MathError> { if y == 0.0 { Err(DivisionByZero) // } else { Ok(x / y) } } // Result fn div_user() -> () { match div(1.0, 0.0) { Err(why) => /* , why MathError */ Ok(result) => /* result f64 */ } } // fn error_proxy() -> Result<f64, MathError> { let result1 = try!(div(1.0, 0.0)); let result2 = try!(div(1.0, result1)); div(1, result2); }
これで、エラー処理に関するRustの可能性は、実際にはそこで終わります。
Rustは、強力な静的分析システムを備えた低レベルのプログラミング言語です。 たとえば、Rustの静的分析では、メモリを使用した不注意な作業は許可されません。 Rustの詳細については、 公式Webサイトで 、 解析されたコードの例を参照してください(例: rustbyexample.com) : Option 、 Result 、 try! 。 この言語は非営利組織Mozillaによって開発されており、Rust 1.0のリリースは2015年初頭に予定されています。