Wie kann man das Folgende umschreiben, um es mehr "Scala Weg" zu machen oder nur eine Übereinstimmung zu verwenden?Scala: Mustervergleich mit Option [Foo] und Parameter von Foo
case class Foo(bar: Any)
val fooOpt = Some(Foo("bar as String"))
def isValid(p: Any) = p match {
case _ @ (_: String | _: Int) => true
case _ => false
}
//Is it possible to check for the type of bar directly in this if statement?
fooOpt match {
case Some(f) if isValid(f.bar) => doSomething
case _ => doSomethingElse
}
Eine Alternative wäre die Verwendung des isInstanceOf.
fooOpt match {
case Some(f) if f.bar.isInstanceOf[String] => doSomething
case Some(f) if f.bar.isInstanceOf[Int] => doSomething //could also rewrite to use just one case
case _ => doSomethingElse
}
Gibt es einen anderen Weg?
Cheers könnte umschreiben zu verwenden! Macht perfekt Sinn. Hatte das Gefühl, dass es eine einfache und einfache Lösung gab! Danke – Bruno
BTW, wenn Foo mehrere Params hatte, wie würden Sie den "Balken" wählen, ohne sie alle zu beschreiben? – Bruno
@Bruno Verwenden Sie einfach Unterstreichungsmuster für die anderen Parameter.So etwas wie 'Some (Foo (i: Int, _, _))' du fügst zwei weitere Parameter zu 'Foo' hinzu. – Alec