2017-10-12 11 views
5

나는이 코 틀린 객체 선언에서 찾고 있어요."수신기가있는 람다":이 Kotlin 구조는 무엇입니까?</p> <pre><code>object A : B({ variableName1 = "text1" variableName2 = "text2" params { param("Foo", "Bar") } }) </code></pre> <p>을 그리고 클래스 B의 생성자의 인수가 무엇인지 알아낼 수 없습니다 :

나는 의도적으로이 예제에서 정보를 멀리 추상화했지만 클래스 B는 실제로

jetbrains.buildServer.configs.kotlin.v10.BuildType 

내가 유형에 대한 문서를 찾을 수 없습니다. I have found something that was close하지만 인터페이스에 대한 정의이므로 생성자가 없습니다.

요약하면, Kotlin에서 다음과 같은 구성은 무엇입니까?

{ 
    variableName1 = "text1" 
    variableName2 = "text2" 

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

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

+1

@YoavSternberg 이것은 내가보고 있었고 당황한 것입니다. 나는 논쟁이 리시버가있는 함수 리터럴이라고 말한 구절을 놓친 것 같습니다. – ZoSal

답변

8

이 구조는 "Lambda with Receiver", 당신이 광범위하게 코 틀린의 DSL 구현에 사용되는 찾을 수 있습니다 일명 "수신기와 리터럴 기능"이라고합니다. 예를 들어 HTML builder DSL을 살펴보십시오.

전체 개념을 this 스레드로 자세히 설명했습니다.