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.
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:
Und um es zu benutzen:
%Vor%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.
Tags und Links scala arguments syntax function syntax-error