参考:https://developer.android.com/kotlin/learn
我们在用kotlin时 会有 let、 with 、also 等高阶函数,点击去初看源码晦涩难懂简直无从下眼!
源码also方法大概的意思是 : 万能类 泛型 T 添加了 also方法, 形参是声明了的一个传值 为T的方法没有返回值,而且also方法是有返回 T的
public inline fun <T> T.also(block: (T) -> Unit): T {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block(this)
return this
}
再细细捋一捋 ,我们都知道 kotlin声明 变量 和函数 的方式,这样的话我们就可以 以变量的方式声明函数 变量myFun跟 函数 myFun功能相同.
var a: String? = null
fun myFun() : Unit { }
var myFun: () -> Unit = { }
这样就不难理解理解also的形参了,结合lambda的用法这就是kotlin高阶函数初成。
fun main() {
demo<Int, Int>(2, 2)
}
fun <T, R> demo(a: T, r: R) {
var mmm: (T) -> R = {
println("执行myAlso(mmm))")
r
}
fun T.myAlso(m: (T) -> R): R {
return m(this)
}
a?.myAlso(mmm)
a?.myAlso {
println("执行myAlso { }")
r
}
}
总结:kotlin 高阶函数 很类似java 中用的 抽象类的多态使用, 语言的设计同归而殊途!!