2011-12-12 33 views
17

Khi mẫu khớp với ngoại lệ với tuyên bố trường hợp, có cách nào đơn giản hơn để khớp cùng một ngoại lệ với một tập hợp các loại ngoại lệ không? Thay vì điều này:Đối sánh nhiều loại ngoại lệ với cùng một trường hợp

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

Something như thế này sẽ được tốt đẹp:

case e: MappingException | ParseException | SomeOtherException => 

là một cái gì đó như thể này?

+0

thể trùng lặp của [Bắt nhiều trường hợp ngoại lệ cùng một lúc trong Scala] (http://stackoverflow.com/questions/6384073/catching-multiple-exceptions-at-once-in-scala) – agilesteel

Trả lời

42

Bạn có thể làm điều này:

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

Nếu bạn đang cố gắng để tiết kiệm một số dòng mã và bạn xử lý các loại cùng một ngoại lệ thường xuyên, bạn có thể xem xét việc xác định một chức năng phần trước để sử dụng như một handler :

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

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

Rất thông minh! Cảm ơn bạn đã phản hồi. – Josh

+0

Đây có phải là trường hợp đặc biệt hay đây là tính năng ngôn ngữ ... bạn có thể giải thích cách hoạt động/mở rộng ra ngoài – monksy

+0

Hữu ích :) Cảm ơn ... –

Các vấn đề liên quan