Согласование нескольких типов исключений с одним и тем же случаем

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

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

Что-то вроде этого было бы хорошо:

case e: MappingException | ParseException | SomeOtherException =>

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

Ответы

Ответ 1

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

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

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

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

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