Мне интересно, как я могу использовать сопоставление шаблонов нескольких типов. Я имею:
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
Итак, есть ли способ определить несколько разных типов в предложении case? Думаю, это сделало бы код красивее. Как будто у меня их будет 5, я напишу один и тот же код 5 раз (вызов doSomething ()).
Заранее спасибо!
doSomething
случаев, почему бы не сопоставитьcase a : MyAbstract
then ...?