2017-05-30 1 views
3

Ich folgte diesem Link https://kotlin.link/articles/DSL-builder-in-Kotlin.html, um die Builder-Implementierung in Kotlin zu verstehen. Ich habe die Methoden in der Builder-Klasse nicht verstanden. Die Methode name() empfängt die Extension-Funktion als ein Argument, das nichts empfängt und String zurückgibt. Und der Anrufer ruft name { "ABC" }. Wenn der Aufrufer String an die Methode name übergibt, wie wird dies in eine Extension-Methode übersetzt, die String zurückgibt?Erläuterung zu Funktionsliteral mit Empfänger in Kotlin

Ich versuchte, Kotlin-Dokumentation für Funktionsliterale mit Empfängern zu folgen, aber alle hatten Proben, die Unit zurückgibt oder sich auf DSL-Builder bezieht. Ich habe versucht, es zu googeln, um zu verstehen, aber kein Glück, das Konzept zu verstehen.

Antwort

4

Der Anruf an name { "ABC" } ist eine Kombination von zwei Kotlin-Konventionen.

Es gibt eine Konvention, dass, wenn der letzte Parameter zu einer Funktion eine Funktion ist, Sie die Klammern weglassen können. Da der Lambda keine Parameter enthält, wird "ABC" zurückgegeben.

Also übergibt der Aufrufer tatsächlich ein Lambda in der Form name ({() -> "ABC"}), anstatt eine Zeichenfolge.

Blick auf das Beispiel in der Verbindung, sieht es nicht wie der Empfänger für name() notwendig ist, weshalb es irreführend sein könnte.