は、私は2つのアクション実行しようとすべきコード記述する必要があります。エラーをスローすることができます集約複数のエラー
def foo(): Unit {
a()
b()
}
a()
をし、私はまだb()
は(最終的には、単純なトライキャッチを解くことができること)のことが起こるしたいですまた、b()
も失敗する可能性があります。両方の記述で集約例外を戻したいのですが、それを実装する最も良い方法は何ですか?
は、私は2つのアクション実行しようとすべきコード記述する必要があります。エラーをスローすることができます集約複数のエラー
def foo(): Unit {
a()
b()
}
a()
をし、私はまだb()
は(最終的には、単純なトライキャッチを解くことができること)のことが起こるしたいですまた、b()
も失敗する可能性があります。両方の記述で集約例外を戻したいのですが、それを実装する最も良い方法は何ですか?
サブタイプがSome
とNone
のOption
があります。 Option
は、何らかの操作の結果が空である可能性があるという考えを捕捉します。
同様に、Scalaは例外をスローする関数の効果を取得するために、サブクラスがSuccess
とFailure
のTry
です。あなたはa
とb
のオブジェクトをTry
オブジェクトにラップすることができます。これらのオブジェクトは、クラスTry
で使用可能なメソッドを使用して操作できます。例:
簡単で素敵:
val exc = List(Try(a), Try(b)) collect { case Failure(ex) => ex }
あなたは結果としてThrowable
のリスト(潜在的に空)を取得します。
aとbの両方に問題はありますが、障害の状況でも処理したい場合は、Try(a).map(b).collect(result)などを使用してください。 Monadsの構成は、常に行く方法です。 (a).recover(w/e)を試してみてください。(b).recover(w/e)を試してみてください。あなたが望むなら私はより包括的な回答を提供することができます –