这个表达式看起来不像是一个接受Int并返回Int的lambda
Int
lateinit var myVar: Int.() -> Int
Int.()在Kotlin中是什么意思?如何给myVar赋值?
Int.()
myVar
vc9ivgsu1#
Kotlin支持扩张函数的概念。Foo.(Bar) -> Baz这样的类型定义描述了一个函数类型,它将Foo类型的对象作为其接收方,接受Bar类型的参数并返回Baz类型的对象。这允许以合成方式向你无法控制的类型添加扩展。例如,你可以向String添加一个扩展并调用它,就像在类本身上定义它一样。
Foo.(Bar) -> Baz
Foo
Bar
Baz
String
fun String.hasEvenLength(): Boolean = this.size % 2 == 0 val result = "foo".hasEvenLength()
扩展函数中的this关键字对应于接收器对象(在点之前传递的对象)。
this
v9tzhpje2#
Int在这里被称为接收器。myVar基本上是一个扩展函数文字。这意味着在此函数的作用域中,关键字this将引用它被调用的对象Int。因此,您可以将myVar赋值为myVar = { this },并调用42.myVar()。
myVar = { this }
42.myVar()
2条答案
按热度按时间vc9ivgsu1#
Kotlin支持扩张函数的概念。
Foo.(Bar) -> Baz
这样的类型定义描述了一个函数类型,它将Foo
类型的对象作为其接收方,接受Bar
类型的参数并返回Baz
类型的对象。这允许以合成方式向你无法控制的类型添加扩展。例如,你可以向
String
添加一个扩展并调用它,就像在类本身上定义它一样。扩展函数中的
this
关键字对应于接收器对象(在点之前传递的对象)。v9tzhpje2#
Int
在这里被称为接收器。myVar
基本上是一个扩展函数文字。这意味着在此函数的作用域中,关键字this
将引用它被调用的对象Int
。因此,您可以将
myVar
赋值为myVar = { this }
,并调用42.myVar()
。