Ja zu passieren, können Sie:
def foo(p1: String) = Action { implicit request =>
Ok(bar(p1))
}
private def bar(p1: String)(implicit req: RequestHeader) = "content"
Der Code:
Action { implicit request
ruft diese Methode auf dem Aktionsobjekt:
def apply(block: Request[AnyContent] => Result): Action[AnyContent] = {
Also, was Sie "Anfrage" genannt stimmt mit dem Namen Paramater "Block". Das "implizite" ist hier optional: Es stellt den Wert "request" als impliziten Parameter für andere Methoden-/Funktionsaufrufe zur Verfügung.
Das implizite in Ihrer "bar" -Funktion besagt, dass es den Wert von "req" von einem impliziten Wert nehmen kann und nicht unbedingt explizit übergeben werden muss.
Danke Adam, das funktioniert. Follow-up-Frage, muss das Implizite als Curry-Parameter übergeben werden? – Bob
In Scala ist es der Parameter _list_, nicht der Parameter, der implizit ist. Ich bin mir der Motivation dafür nicht sicher. –
scala> val implizite i = 1 i: Int = 1 Scala> val implizite s = "Hallo" s: java.lang.String = Hallo scala> def concat (implizit x: Int, y: String) = x + y concat: (implizit x: Int, impliziter y: String) String scala> concat res0: String = 1hi –