2017-12-05 4 views
1

私はEitherまたはTry()のいずれかを使用して以下のコードを置き換えたいと考えました。 vanila scalaを使って、以下のコードをより簡潔にする方法はありますか?私が望むように見えるのは、仮説のようなものを持つことです。Try(code).toOption.invertエラーが発生した場合にTry()をSome(errorMsg)のオプションにマッピングする

def calculateSomething(): Option[String] = 
    try { 
     // execute some side effects 
     None  
    } catch { 
     case t:Throwable => Some("some error msg") 
    } 

おかげ

+0

なぜ呼び出し元メソッドに 'try catch'がありませんか? – Mzf

+0

一般的に、これらの方法はいくつかあり、これらの小さなメソッドを実行してからすべてのエラーメッセージを収集したいと考えています。 –

答えて

3

あなたが探しているinvert方法のような一種のですTryfailed方法使用できます。

val option = Try(code).failed.toOption 

ザ・をすることができますちょうどmapそれ以上のあなたの場合エラーメッセージのみが必要です。

option.map(_.getMessage) 

getMessageをスロー可能にすることも、カスタムメッセージが必要な場合は定数(たとえば_ => "my error message"など)を返す関数を持つこともできます。

関連する問題