Die Frage ist ausschließlich über Scala-Syntax, obwohl es etwas Code von akka (als Beispiel) enthält.Verständnis der Funktion in Scala
Ich bin ziemlich neu in Scala. Graben in den Quellcode von akka kam ich mit dem folgenden ziemlich seltsam Methode up:
def transform[C]
(f: ExecutionContext ⇒ Materializer ⇒ Future[B] ⇒ Future[C]): Unmarshaller[A, C] =
Unmarshaller.withMaterializer { implicit ec ⇒ implicit mat ⇒ a ⇒ f(ec)(mat)(this(a)) }
wo Unmarshaller.withMaterializer
definiert als
def withMaterializer[A, B](f: ExecutionContext ⇒ Materializer => A ⇒ Future[B]): Unmarshaller[A, B]
Was ist hier los? Was ist die gruselige Funktion f: ExecutionContext => Materializer => Future[B] => Future[C]
. Und was mir merkwürdiger erschien, war die Sequenz implicit
s: implicit ec => implicit mat => a => f(ec)(mat)(this(a))
, obwohl withMaterializer
keine impliziten Parameter hat.
Was bedeutet implizit in solchen Sequenzen?
Ich glaube nicht, dass Sie Ihr 'f' ohne Parameter aufrufen können, um implizite Werte zu verwenden. Es funktioniert nur für Methoden. 'implizit' im Funktionsliteral bedeutet, dass das Argument im Funktionskörper implizit ist. –
Sie haben Recht. 'f' ist nicht als Methode mit Standardparametern verwendbar. Ich habe versucht, diese Konstruktion mit einem einfacheren Beispiel zu illustrieren, habe sie aber aus dem Zusammenhang genommen. – laughedelic