lambda 标准函数
标准函数let,run,with,also 和 apply
一、let 函数
必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中的参数为当前调用者,it可表示当前调用对象,且最后一行代码作为返回值
val person = Person("yrdz", 24) val a = person.let { it.age it.name } print(a) // 输出"yrdz“
二、run 函数
必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中拥有当前调用对象的上下文 this ,且最后一行代码作为返回值。
与let相似
三、with 函数
接收两个参数,第一个为任意类型参数,第二个为 Lambda 表达式参数,Lambda 表达式中拥有第一个参数的上下文 this ,且最后一行代码作为返回值
var list: MutableList<Int>? = mutableListOf(2, 3) val withReturnValue = with(list) { this?.add(50) 50 } println(withReturnValue) println(list)
结果:println(withReturnValue) : 50
println(list): [2,3,50]
with 最后一行作为返回值
四、also 函数
必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中的参数为当前调用者,无法指定返回值,这个函数返回的是当前调用对象本身
五、apply 函数
必须让某个对象调用,接收一个 Lambda 表达式参数,Lambda 表达式中拥有当前调用对象的上下文 this ,无法指定返回值,这个函数返回的是当前调用对象本身。
接上with函数
val applyReturnValueList = list?.apply { add(80) 100 } print(list) print(applyReturnValueList)
结果:println(list) :[2,3,50,80]
println(applyReturnValueList):[2,3,50,80]
apply函数返回值是调用对象本身
小结区别:
- lei、with、run最后一行为返回值
- aslo,apply返回调用对象本身
参考:(23条消息) “Kotlin“系列: 一、Kotlin入门_sweetying520的博客-CSDN博客
Kotlin中let、run、with、apply及also的差别