Наконец-то "выходит за рамки" в блоке try / catch - PullRequest
7 голосов
/ 28 февраля 2012

Есть ли способ получить доступ к val, созданным в блоке try / catch внутри блока finally? или, наконец, блок выходит за рамки.

def myTryCatch: Either[Exception, String] = {
  try {
    val w = runOrFailWithException("Please work...")
    Right(w)
  } catch {
    case ex: Exception => {
      Left(ex)
    }
  }
  finally {
    // How do I get access to Left or Right in my finally block.
    // This does not work
    _ match {
      case Right(_) =>
      case Left(_) =>
    }
  }
}

1 Ответ

12 голосов
/ 28 февраля 2012

Зачем вам это нужно в блоке finally?Поскольку try/catch является выражением, вы можете сопоставить его значение:

try {
  val w = runOrFailWithException("Please work...")
  Right(w)
} catch {
  case ex: Exception => Left(ex)
} match {
  case Right(_) =>
  case Left(_) =>
}
...