public inline fun <T, R> T.run(block: T.() -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
Kotlin标准库中有这样一个拓展函数,出现了 T.() -> R 这样类型的入参。这个与普通的 () -> R 有什么区别呢?
其实只有一点小区别,这里将入参 block 定义为了 T的拓展函数,赋予了block访问T的能力。当使用lambda表达式并且要访问T时,可以用这个方式。