Ich frage mich, wie kann ich mehrere Muster Mustererkennung verwenden. Ich habe:Scala mehrere Muster entsprechen
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()
}
So möchte ich etwas schreiben:
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
ich ähnliche Konstruktion in einigen Tutorial sah, aber es gibt mir eine Fehlermeldung:
pattern type is incompatible with expected type;
[error] found : object MyFirst
[error] required: MyAbstract
So ist gibt es eine Möglichkeit, einige verschiedene Typen in der case-Klausel zu definieren? Ich denke, es würde Code hübscher machen. Als ob ich 5 davon haben würde, werde ich den gleichen Code 5 Mal schreiben (doSomething() aufrufen).
Vielen Dank im Voraus!
Ich denke, es ist ein XY-Problem; Sie haben eine gemeinsame Oberklasse für alle "doSomething" -Fälle, warum passen Sie die "case a: MyAbstract" dann nicht ...? –
Sorry, vergessen zu erwähnen, dass ich andere Klassen habe, die die MyAbstract-Klasse erweitern und DoSomething nicht aufrufen sollten. – psisoyev
Oh, OK, ich wollte das nur klarstellen :) Du hast jetzt eine korrekte Antwort auf dein Problem. –