10

Scalaでは(他の関数型言語のように)制御フローを壊さない傾向があると聞いた人もいます...代わりに、慣例により、エラーを。で返しますEither Left

しかし、その例外からどのようにstracktraceを取得するのでしょうか。今のところ、私は左側にErrorコード、メッセージ、原因(Errorも)を含む単純なケースクラスを返します。しかし、エラーが発生した場合、スタックトレースを取得できません。私のアプリケーションが複雑になると、それを返したコードブロックを見つけるのが難しいかもしれませんError...根本的な原因は不可欠です。


では、実際には何をしますか?

Errorカスタムの代わりに、Javaタイプを返す必要がありますExceptionか?スタックトレースや原因などの重要な情報を失うことなく、Scalaの例外処理のベストプラクティスは何ですか?ThrowableLeft

4

1 に答える 1

12

Either[java.lang.Throwable, A]Throwableスタックトレースにアクセスできる場合は)を使用し、(一般的に)カスタムエラータイプを拡張することをお勧めしますjava.lang.Exception

これは、たとえばDispatch 0.9Either[Throwable, A]で使用される方法であり、失敗する可能性のある計算を表すために使用され、カスタムエラータイプは次のようになります。

case class StatusCode(code: Int)
  extends Exception("Unexpected response status: %d".format(code))

Scalaz 7も、Validation.fromTryCatch(a: => T)を返します。これは、おおよそ。と同等です。Validation[Throwable, T]ValidationEither

于 2012-09-16T19:57:46.110 に答える