2011-12-12 26 views
17

Bir durum bildirimi ile bir özel durumu eşleştirirken, aynı istisnayı bir dizi özel durum türüyle eşleştirmenin daha basit bir yolu var mı? Bunun yerine: BöyleBirden çok özel durum türünü aynı kutuya eşleştirme

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

şey güzel olurdu:

case e: MappingException | ParseException | SomeOtherException => 

bu mümkün gibi bir şey var mı? Eğer kod satırları kurtarmaya çalışıyorsanız

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

ve size bir işleyici olarak kullanmak önceden kısmi işlevi tanımlayan düşünebilirsiniz düzenli istisnalar aynı tür işlemek:

+0

[Scala aynı anda birden çok istisnaları yakalamak] olası yinelenen (http://stackoverflow.com/questions/6384073/catching-multiple-exceptions-at-once-in-scala) – agilesteel

cevap

42

Bunu yapabilirsin :

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

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

Çok zeki! Cevap için teşekkürler. – Josh

+0

Bu özel bir durum mu yoksa bu bir dil özelliğidir ... bunun nasıl çalıştığını/dışa açıldığını açıklar mısınız – monksy

+0

Yardımcı :) Teşekkürler ... –

İlgili konular