“MyType.()”在Kotlin中是什么意思?

1sbrub3j  于 2023-01-13  发布在  Kotlin
关注(0)|答案(2)|浏览(140)

这个表达式看起来不像是一个接受Int并返回Int的lambda

lateinit var myVar: Int.() -> Int

Int.()在Kotlin中是什么意思?如何给myVar赋值?

vc9ivgsu

vc9ivgsu1#

Kotlin支持扩张函数的概念。
Foo.(Bar) -> Baz这样的类型定义描述了一个函数类型,它将Foo类型的对象作为其接收方,接受Bar类型的参数并返回Baz类型的对象。
这允许以合成方式向你无法控制的类型添加扩展。例如,你可以向String添加一个扩展并调用它,就像在类本身上定义它一样。

fun String.hasEvenLength(): Boolean = this.size % 2 == 0

val result = "foo".hasEvenLength()

扩展函数中的this关键字对应于接收器对象(在点之前传递的对象)。

v9tzhpje

v9tzhpje2#

Int在这里被称为接收器。myVar基本上是一个扩展函数文字。这意味着在此函数的作用域中,关键字this将引用它被调用的对象Int
因此,您可以将myVar赋值为myVar = { this },并调用42.myVar()

相关问题