首先声明block是lambda表达式,receiver一般参数
//非扩展函数,传递block,返回block执行结果
public inline fun <R> run(block: () -> R): R {
return block()
}
//扩展函数,传递block,返回block执行结果,上下文对象this
public inline fun <T, R> T.run(block: T.() -> R): R {
return block()
}
//非扩展函数,传递receiver和block,返回receiver.block()执行结果,上下文对象为参数receiver
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
return receiver.block()
}
//扩展函数,传递block并执行 block(),返回T,上下文对象this
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
block()
return this
}
//扩展函数,传递block并执行block(this),返回T,上下文对象it
public inline fun <T> T.also(block: (T) -> Unit): T {
block(this)
return this
}
//扩展函数,传递block并执行block(this),返回执行后的结果,上下文对象it
public inline fun <T, R> T.let(block: (T) -> R): R {
return block(this)
}