Соответствие нескольких типов исключений одному и тому же случаю - PullRequest
18 голосов
/ 13 декабря 2011

Когда шаблон сопоставляет исключение с оператором case, существует ли более упрощенный способ сопоставления одного и того же исключения с набором типов исключений? Вместо этого:

} catch {
  case e if e.isInstanceOf[MappingException] || e.isInstanceOf[ParseException] => 

Примерно так было бы неплохо:

case e: MappingException | ParseException | SomeOtherException =>

Возможно ли что-то подобное?

1 Ответ

48 голосов
/ 13 декабря 2011

Вы можете сделать это:

catch {
  case e @ (_: MappingException | _: ParseException | _: SomeOtherException) =>
}

Если вы пытаетесь сохранить некоторые строки кода и регулярно обрабатываете одни и те же типы исключений, вы можете заранее определить частичную функцию для использования в качествеобработчик:

val myHandler: PartialFunction[Throwable, Unit] = {
  case e @ (_: MappingException | _: ParseException | _: SomeOtherException) =>
}

try {
  throw new MappingException("argh!")
} catch myHandler
...