Frage Wie codierst du einen Mustervergleichs-Codeblock in Scala?


Wie codieren Sie eine Funktion, die einen Codeblock als Parameter mit case-Anweisungen akzeptiert? Zum Beispiel möchte ich in meinem Codeblock keine Übereinstimmung oder einen Standardfall explizit ausführen. Ich sehe ungefähr so ​​aus

myApi {
    case Whatever() => // code for case 1
    case SomethingElse() => // code for case 2
}

Und in meinem myApi () wird der Codeblock ausgeführt und die Matches ausgeführt.


5
2018-05-10 04:53


Ursprung


Antworten:


Sie müssen ein verwenden PartialFunction dafür.

scala> def patternMatchWithPartialFunction(x: Any)(f: PartialFunction[Any, Unit]) = f(x)
patternMatchWithPartialFunction: (x: Any)(f: PartialFunction[Any,Unit])Unit

scala> patternMatchWithPartialFunction("hello") {
     |   case s: String => println("Found a string with value: " + s)
     |   case _ => println("Found something else")
     | }
Found a string with value: hello

scala> patternMatchWithPartialFunction(42) {
     |   case s: String => println("Found a string with value: " + s)
     |   case _ => println("Found something else")
     | }
Found something else

6
2018-05-10 06:08



Dies sollte ausreichen, um es zu erklären: Eine Tour von Scala: Pattern Matching


-1
2018-05-10 05:03