2017-05-30 7 views
3

私はこのリンクhttps://kotlin.link/articles/DSL-builder-in-Kotlin.htmlを読んで、Kotlinのビルダー実装を理解していました。私はBuilderクラス内のメソッドを理解していませんでした。メソッドname()は、何も受け取らずにStringを返す引数としてExtension Functionを受け取ります。また、発信者はname { "ABC" }と呼びます。呼び出し元がnameメソッドにStringを渡している場合、Stringを返すExtensionメソッドにどのように変換されますか?Kotlinの受信機で関数リテラルの説明

受信者の関数リテラルのKotlinドキュメントに従ってみましたが、すべてがUnitを返すサンプルか、DSLビルダーを参照するサンプルを持っていました。それを理解するためにもグーグルで試してみたが、そのコンセプトを掴むことはできなかった。

答えて

4

name { "ABC" }の呼び出しは、2つのKotlin規則の組み合わせです。

関数の最後のパラメータが関数の場合、かっこは省略できます。ラムダへのパラメータがないので、"ABC"も返されます。

したがって、呼び出し元は実際には文字列ではなくname ({() -> "ABC"})の形式でラムダを渡しています。

リンクの例を見ると、受信者がname()に必要なように見えないため、誤解を招く可能性があります。