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

Jos*_*osh 18 scala pattern-matching

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

} catch {
  case e if e.isInstanceOf[MappingException] || e.isInstanceOf[ParseException] => 
Run Code Online (Sandbox Code Playgroud)

像这样的东西会很好:

case e: MappingException | ParseException | SomeOtherException =>
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

Ben*_*mes 48

你可以这样做:

catch {
  case e @ (_: MappingException | _: ParseException | _: SomeOtherException) =>
}
Run Code Online (Sandbox Code Playgroud)

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

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

try {
  throw new MappingException("argh!")
} catch myHandler
Run Code Online (Sandbox Code Playgroud)

  • 非常聪明!感谢您的答复. (4认同)