エラーの値にたどり着くまで、何段階かのステップが必要です。エラーの値にたどり着くまで、何段階かのステップが必要です。From::from(parse_err);ここに気づくべき、本当に重要なパターンがあります。それらが存在量化型、つまり、トレイトオブジェクトだからです。本当に同じに見えるのです。コンストラクトしました。引数とリターン型の両方でオーバーロードされているからです。このパターンは重要です。同じ関数を使って、エラーを同一の型に変換する、確かな方法を提供するからです。マクロを再訪するときが訪れました。});}これは本当の定義ではありません。マクロは、はるかに強力になります。自動的な型変換をただで手に入れられるのですから。呼び出しを取り除くことができると約束しました。共に動く型を一つ選ぶだけでよいのです。n)}理想的なエラーハンドリングまで、あと一歩です。私たちのコードには、エラーハンドリングを終えた後も、ごくわずかなオーバーヘッドしかありません。呼び出し、場合分けなどの邪魔者を排除したコードが得られるのです。呼び出し元に返すと、呼び出し元では背後のエラー型が何であるかを、(簡単には)調べられません。返すよりは明らかに改善されてます。いったメソッドを呼ぶこともできるからです。不透明であるという制限は残ります。(注意:これは完全な真実ではありません。Rustでは実行時のリフレクションができるからです。戻って、全てを一つにまとめ上げましょう。エラーの値に対して呼ぶことで、自動的な型変換をする様子を見ました。これはたしかに動きますが、呼び出し元にとって、型がオペークになってしまいました。これを直すために、すでによく知っている改善方法である独自のエラー型を使いましょう。値について、人間が十分理解できる説明を得られます。値について、人間が十分理解できる説明を得られます。あることに注目してください。定義を思い出してください。作るのか、教えてあげているだけです。このケースでは、単に対応する値コンストラクタを呼ぶことで構築しています。これくらい簡単にできてしまいます。取り除くことだけです。呼ぶので、もう不要になりました。実装を提供したからです。}}これで完成です!ライブラリ作者たちへのアドバイスもし、あなたのライブラリがカスタマイズされたエラーを報告しなければならないなら、恐らく、独自のエラー型を定義するべきでしょう。)は、あなたの自由です。よる表現を超えたエラー情報を提供することが、ほとんどの場合、良い方法となるしょう。これは紛れもなく、ユースケースに深く依存します。トレイトを実装するべきでしょう。ための、最低ラインの柔軟性を与えます。実装が必須になるからです)。実装を提供するのも便利かもしれません。実装を提供しています。定義したくなるかもしれません。ライブラリでエラー型を一つだけ定義しているときは当てはまります。ケーススタディ:人口データを読み込むプログラムこのセクションは長かったですね。あなたのバックグラウンドにもよりますが、内容が少し濃すぎたかもしれません。たくさんのコード例に、散文的な説明が添えられる形で進行しましたが、これは主に学習を助けるために、あえてこう構成されていたのでした。次はなにか新しいことをしましょう。ここでは世界の人口データを問い合わせるための、コマンドラインプログラムを構築します。目標はシンプルです:プログラムに場所を与えると、人口を教えてくれます。7.2MB)があります。いままで書いてきたコードでは、Rustの標準ライブラリだけを使うようにしてきました。今回のような現実のタスクでは、最低でもCSVデータをパースする部分と、プログラムの引数をパースして、自動的にRustの型にデコードする部分に何か使いたいでしょう。カバーされていますので、ここでは簡単に説明します。world!引数のパース引数のパースができるようにしましょう。簡単に言うと、Getoptsはオプションのベクタから、引数のパーサーとヘルプメッセージを生成します(実際には、ベクタは構造体とメソッドの背後に隠れています)。パースが終わると、プログラムの引数をRustの構造体へとデコードできます。そこから、例えば、フラグが指定されたかとか、フラグの引数がなんであったかといった、フラグの情報を取り出せるようになります。message.:この使用法のメッセージを表示する。このように、まず、このプログラムに渡された引数のベクタを取得します。次に、最初の要素、つまり、プログラムの名前を格納します。続いて引数フラグをセットアップしますが、今回はごく簡単なヘルプメッセージフラグが一つあるだけです。使って引数のベクタをパースします(インデックス0はプログラム名ですので、インデックス1から始めます)。パースに成功したら、パースしたオブジェクトをマッチで取り出しますし、失敗したならパニックさせます。ここまでたどり着いたら、ヘルプフラグが指定されたか調べて、もしそうなら使用法のメッセージを表示します。ヘルプメッセージのオプションはGetoptsにより生成済みですので、使用法のメッセージを表示するために追加で必要なのは、プログラム名とテンプレートだけです。ユーザーがヘルプフラグを指定しなかったなら、変数を用意して、対応する引数の値をセットします。ロジックを書くコードを書く順番は人それぞれですが、エラーハンドリングは最後に考えることが多いでしょう。これはプログラム全体の設計にとっては、あまり良いことではありません。ラピッドプロトタイピングには便利かもしれません。呼ばせることで)強制しますので、プログラムのどこがエラーを起こすかは、簡単にわかります。このケーススタディでは、ロジックは非常にシンプルです。やることは、与えられたCSVデータをパースして、マッチした行にあるフィールドを表示するだけです。追加することを忘れずに。この構造体はCSVファイルの各行のデータを表現します。しまうといった、核心部分のエラーハンドリングの大半から解放されます。CSVパーサーは、これらを正しい値で埋めてくれます。この構造体はCSVファイルの各行のデータを表現します。しまうといった、核心部分のエラーハンドリングの大半から解放されます。CSVパーサーは、これらを正しい値で埋めてくれます。count:人口のカウントここで、エラーの概要を把握しましょう。