Ich hatte eine Liste von Scala Tupeln wie folgt:
%Vor%und ich wollte es in einer Liste von Int abbilden, wobei jedes Element die Summe der Ints in einem entsprechenden Tupel ist. Ich wollte auch nicht die x._1 Schreibweise verwenden, also löste ich das Problem mit einem Muster, das wie folgt zusammenpasste.
%Vor%Damit habe ich die Liste r erhalten: Liste [Int] = Liste (3, 5, 7) wie erwartet. An diesem Punkt entdeckte ich fast zufällig, dass ich dasselbe Ergebnis mit einer abgekürzten Form wie folgt erreichen kann:
%Vor%Ich kann keinen Verweis auf diese Syntax in der Dokumentation finden, die ich habe. Ist das normal? Fehle ich etwas Triviales?
Siehe Abschnitt 8.5 der Sprachreferenz "Pattern Matching Anonymous Functions".
Eine anonyme Funktion kann durch eine Folge von Fällen definiert werden
{case p1 =>b1 ... case pn => bn }
, die als Ausdruck ohne vorherige Übereinstimmung angezeigt werden. Der erwartete Typ eines solchen Ausdrucks muss teilweise definiert werden. Es muss entweder
scala.Functionk[S1, ..., Sk, R]
für einigek
& gt; 0, oderscala.PartialFunction[S1, R]
, wobei der ArgumenttypS1, ..., Sk
vollständig bestimmt werden muss, aber der ErgebnistypR
möglicherweise unbestimmt ist.
Der erwartete Typ bestimmt, ob dies in ein FunctionN
oder PartialFunction
übersetzt wird.
{case(first, second) => first + second}
wird als PartialFunction
literal behandelt. Siehe Beispiele im Abschnitt "Teilfunktionen" hier: Ссылка oder Abschnitt 15.7 von Programmierung in Scala .
Methode map
akzeptiert eine Funktion. In Ihrem ersten Beispiel erstellen Sie eine Funktion, weisen sie einer Variablen zu und übergeben sie an die Methode map
. Im zweiten Beispiel übergeben Sie Ihre erstellte Funktion direkt, ohne sie einer Variablen zuzuordnen. Du machst genau dasselbe.
Tags und Links scala syntax pattern-matching