Kotlin で「.()」はどういう意味ですか? 質問する

Kotlin で「.()」はどういう意味ですか? 質問する

関数にClassName.()で指定された引数がある例を見たことがありますが、これはClassName.Function()である拡張関数ではないようです。

例えばコッターナイフ:

private val View.viewFinder: View.(Int) -> View?
    get() = { findViewById(it) }

その機能についてはよく分かりませんが、

そしてマテリアル引き出しKt

fun Activity.drawer(setup: DrawerBuilderKt.() -> Unit = {}): Drawer {
    val builder = DrawerBuilderKt(this)
    builder.setup()
    return builder.build()
}

コードで直接呼び出すことができる場合

drawer {
    ...
}

括弧で囲まれた引数を与えるのではなく、

これに関する文書はどこかにありますか?

ベストアンサー1

Kotlin で何も受け取らず何も返さない関数は次のようになります。

var function : () -> Unit

違いは、コード内の関数が何も受け取らず、何も返さないことです。しかし、オブジェクトに対して呼び出される

例えば、

class Builder (val multiplier: Int) {
    
    fun invokeStuff(action: (Builder.() -> Unit)) {
        this.action()
    }
    
    fun multiply(value: Int) : Int {
        return value * multiplier
    }
}

ここで重要なのは、action

action: (Builder.() -> Unit)

これは何も返さず、何も取り込まない関数です型のオブジェクトに対して呼び出されますBuilder

つまり、このビルダーを次のように使うと

var builder = Builder(10)
builder.invokeStuff({
    var result = multiply(1)
    println(result)
})

のコンテキストはthisビルダー オブジェクトに設定されており、ビルダー内で宣言された関数を呼び出すことができます。

詳細はこちら

おすすめ記事