2011-12-12 46 views
17

当模式与case语句匹配异常时,是否有将同一异常与一组异常类型进行匹配的更简化方法?取而代之的是:将多个异常类型匹配到同一个案例

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

像这样的事情将是很好:

case e: MappingException | ParseException | SomeOtherException => 

是这样的可能吗?

+0

[捕一次多个异常斯卡拉]的可能重复(http://stackoverflow.com/questions/6384073/catching-multiple-exceptions-at-once-in-scala) – agilesteel

回答

42

你可以这样做:

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

如果你想节省一些代码行,你经常处理同一类型的异常,你可能会考虑定义的部分功能,如预先的处理程序使用:

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

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

很聪明!感谢您的答复。 – Josh

+0

这是一个特殊情况,还是这是一种语言功能...你能解释这是如何工作/向外扩展 – monksy

+0

有用的:)谢谢... –

相关问题