2016-06-21 15 views
1

は、私は2つのアクション実行しようとすべきコード記述する必要があります。エラーをスローすることができます集約複数のエラー

def foo(): Unit { 
    a() 
    b() 
} 

a()をし、私はまだb()は(最終的には、単純なトライキャッチを解くことができること)のことが起こるしたいですまた、b()も失敗する可能性があります。両方の記述で集約例外を戻したいのですが、それを実装する最も良い方法は何ですか?

+1

aとbの両方に問題はありますが、障害の状況でも処理したい場合は、Try(a).map(b).collect(result)などを使用してください。 Monadsの構成は、常に行く方法です。 (a).recover(w/e)を試してみてください。(b).recover(w/e)を試してみてください。あなたが望むなら私はより包括的な回答を提供することができます –

答えて

3

サブタイプがSomeNoneOptionがあります。 Optionは、何らかの操作の結果が空である可能性があるという考えを捕捉します。

同様に、Scalaは例外をスローする関数の効果を取得するために、サブクラスがSuccessFailureTryです。あなたはabのオブジェクトをTryオブジェクトにラップすることができます。これらのオブジェクトは、クラスTryで使用可能なメソッドを使用して操作できます。例:

2

簡単で素敵:

val exc = List(Try(a), Try(b)) collect { case Failure(ex) => ex } 

あなたは結果としてThrowableのリスト(潜在的に空)を取得します。

関連する問題