Closed2

Rust for rustaceansの勉強メモ:エラー処理

hayaohayao

Rustにおけるエラー処理のベストプラクティスはまだ議論が活発なトピックで、答えが定まっていない

hayaohayao

Enumeration

pub enum CopyError {
  In(std::io::Error),
  Out(std::io::Error),
}

やるべきこと

  • std::io::Errorトレイトを実装する。
  • DisplayDebugを実装する。
    • Display 何を誤ったかの一行の描写 小文字 句読点なし
  • Debug より説明的なエラー
  • (可能なら)SendSyncを実装する。
  • (可能なら)'staticにする。

Erasure

type erased error
Box<dyn Error + Send + Sync + 'static>

Error propagation

  • ?演算子はFromを使っている
  • ?演算子は暫定的にTryと呼ばれているトレイトと単なるシンタックスシュガーである。

Tryトレイト

まだ安定化していない。
アウトライン
後の計算が便利である(happy path)またはそうではないのラッパータイプ
Monad
Result<T, E>
Option<T>
Poll<Result<T,E>>
?演算子を幅広い型に対して扱えるようになるかも

このスクラップは2021/10/25にクローズされました