将多个异常类型匹配到同一个案例

时间:2011-12-12 22:31:07

标签: scala pattern-matching

当模式将异常与case语句匹配时,是否有更简单的方法将同一异常与一组异常类型匹配?而不是:

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

这样的事情会很好:

case e: MappingException | ParseException | SomeOtherException =>

这样的事情可能吗?

1 个答案:

答案 0 :(得分:46)

你可以这样做:

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

如果您尝试保存一些代码行并定期处理相同类型的异常,您可以考虑事先定义部分函数以用作处理程序:

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

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