2011-12-12 65 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

有用的:)謝謝... –

相關問題