Мені цікаво, як я можу використовувати збіг декількох типів. Я маю:
abstract class MyAbstract
case class MyFirst extends MyAbstract
case class MySecond extends MyAbstract
case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething()
val x: MyAbstract = MyFirst
x match {
case a: MyFirst => doSomething()
case b: MySecond => doSomething()
case _ => doSomethingElse()
}
Тому я хотів би написати щось на зразок:
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
Я бачив подібну конструкцію в якомусь підручнику, але це призводить до помилки:
pattern type is incompatible with expected type;
[error] found : object MyFirst
[error] required: MyAbstract
Тож чи є спосіб визначити кілька різних типів у реченні on case? Я думаю, це зробить код гарнішим. Як ніби у мене їх буде 5, я напишу один і той же код 5 разів (викликаючи doSomething ()).
Спасибі заздалегідь!
doSomething
випадків, чому б не відповідатиcase a : MyAbstract
тодішньому ...?