Kotlin作用域函数let
、apply
、also
、run
看起来像异步回调。但它们似乎是按顺序执行的。这是怎么做到的?实施细节是什么?
作用域函数只是为了让代码更容易读写。它们不是异步回调。
scope函数没有引入任何新的技术功能,但它们可以使代码更加简洁易读。
实际上,它们是内联函数。例如,apply
是这样声明的:
// Note "inline" modifier
public inline fun <T> T.apply(block: T.() -> Unit): T {
block()
return this
}
inline
函数内联到它们的调用站点。例如,文档中的代码:
val adam = Person("Adam").apply {
age = 20
city = "London"
}
println(adam)
在编译过程中变成这样-apply
调用完全消除
val temp = Person("Adam")
temp.age = 20
temp.city = "London"
val adam = temp
println(adam)