2016年08月18日

scala.util.Tryで複数の例外をcatchする方法がわからなかった

Scalaのtry catchで複数の例外をまとめてcatchしたい場合は、こんな風に書ける。

  try {
    // do something
  } catch {
    case e @ (_: IOException | _: IllegalFormatException) => { e.printStackTrace() }
    case e => { throw e }
  }

scala.util.Tryで似たようなことをどうするか調べようとしたのだけど、いい方法が見つからずこんな書き方になった。

  scala.util.Try {
    // do something
  } match {
    case Success(v) => { /* success */ }
    case Failure(e) => {
      e match {
        case e @ (_: IOException | _: IllegalFormatException) => e.printStackTrace()
        case e => throw e
      }
    }
  }

まあ、いいか。