Zastanawiam się, jak mogę użyć dopasowania wzorców wielu typów. Mam:
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()
}
Więc chciałbym napisać coś takiego:
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
Widziałem podobną konstrukcję w jakimś tutorialu, ale daje mi błąd:
pattern type is incompatible with expected type;
[error] found : object MyFirst
[error] required: MyAbstract
Czy jest więc sposób na zdefiniowanie kilku różnych typów w klauzuli on case? Myślę, że dzięki temu kod byłby ładniejszy. Jakbym miał ich 5, napiszę ten sam kod 5 razy (wywołując doSomething ()).
Z góry dziękuję!
doSomething
przypadków, dlaczego nie dopasowaćcase a : MyAbstract
wtedy ...?