Funktionsliteral mit mehreren impliziten Argumenten

8

Wie definiert man Funktionsliteral mit mehreren impliziten Argumenten in Scala? Ich habe es so versucht:

%Vor%

, aber es wird Kompilierungsfehler ausgelöst.

    
lambdas 28.12.2012, 15:49
quelle

4 Antworten

16

Wie in der vorherigen Antwort angegeben, können Sie nur einen einzelnen impliziten Parameter für ein Funktionsliteral definieren, aber es gibt eine Problemumgehung.

Anstatt mehrerer impliziter Argumente können Sie Funktionsliteral schreiben, indem Sie mehrere Argumentlisten mit je einem Argument aufnehmen. Dann ist es möglich, jedes Argument als implizit zu markieren. Original-Snippet umschreiben:

%Vor%

Sie können es von authAction als f(request)(user) aufrufen.

implicit Keyword Duplikation ist ärgerlich, aber es funktioniert zumindest.

    
lambdas 29.12.2012, 05:37
quelle
6

Soweit ich die Sprachspezifikation verstanden habe, können Sie ab Version 2.9.2 nur einen einzigen impliziten Parameter für anonyme Funktionen definieren.

z. B.

%Vor%     
pagoda_5b 28.12.2012 17:14
quelle
0

Sie hatten gerade eine ähnliche Situation wie Sie, indem Sie eine AuthAction-Funktion in Play implementieren, die einen Nutzer leicht passieren lässt. Sie können es wie tun Lambdas tat es, mit Currying; Ich endete damit, dass meine Funktion authAction die RequestHeader implizit erhält, aber Anfrage und Benutzer explizit übergeben:

%Vor%

Und um es zu benutzen:

%Vor%     
Chris Vandevelde 06.04.2015 17:28
quelle
0

Es gibt keine Möglichkeit, eine anonyme Funktion mit mehreren impliziten Parametern zu definieren.

Um auf die Antwort von @ pagoda_5b und @ paradigmatismus näher einzugehen, Abschnitt 6.23 der Scala-Sprachspezifikation definiert anonyme Funktionen wie folgt:

%Vor%

Wie Sie sehen, können Sie entweder eine Liste von Parametern oder einen einzelnen impliziten Parameter definieren.

Wenn Sie mehrere Parameter als implizit benötigen, müssen Sie sie curren.

    
Ceasar Bautista 19.04.2017 23:24
quelle