Unerwarteter Scala-Mustervergleichssyntax

8

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?

    
Mario Fusco 16.09.2010, 21:03
quelle

3 Antworten

19

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 einige k & gt; 0, oder scala.PartialFunction[S1, R] , wobei der Argumenttyp S1, ..., Sk vollständig bestimmt werden muss, aber der Ergebnistyp R möglicherweise unbestimmt ist.

Der erwartete Typ bestimmt, ob dies in ein FunctionN oder PartialFunction übersetzt wird.

%Vor%     
retronym 16.09.2010, 21:16
quelle
4

{case(first, second) => first + second} wird als PartialFunction literal behandelt. Siehe Beispiele im Abschnitt "Teilfunktionen" hier: Ссылка oder Abschnitt 15.7 von Programmierung in Scala .

    
Alexey Romanov 16.09.2010 21:16
quelle
1

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.

    
folone 16.09.2010 21:16
quelle

Tags und Links