2017-10-12 90 views
5

Patrzę na tej deklaracji obiektu Kotlin:"Lambda z odbiornikiem": Co to za konstrukt Kotlin?

object A : B({ 
    variableName1 = "text1" 
    variableName2 = "text2" 

    params { 
     param("Foo", "Bar") 
    } 
}) 

I nie mogę dowiedzieć się, co argument do konstruktora Klasa B jest.

ja celowo wydobywane z dala informacji w tym przykładzie, ale klasa B jest rzeczywiście

jetbrains.buildServer.configs.kotlin.v10.BuildType 

I nie mogę znaleźć w dokumentacji typu. I have found something that was close, ale jest to definicja interfejsu i dlatego nie ma konstruktora.

Podsumowując, co to za następstwo w Kotlin?

{ 
    variableName1 = "text1" 
    variableName2 = "text2" 

    params { 
     param("Foo", "Bar") 
    } 
} 
+3

https://confluence.jetbrains.com/display/TCD10/Kotlin+DSL –

+1

@YoavSternberg Właśnie na to patrzyłem i się z tym zaintrygowałem. Być może właśnie przegapiłem zdanie, które mówiło, że argument był literałem funkcji z odbiornikiem. – ZoSal

Odpowiedz

8

Konstrukt ten nazywa "Lambda with Receiver" aka „Funkcja Literal z odbiornika”, który znajdziesz używane w implementacjach DSL Kotlin obszernie. Na przykład spójrz na HTML builder DSL.

Opisałem całą koncepcję szczegółowo w wątku this.