一 概述
let
let()函数是一个扩展对象函数,一般用于对象的判空处理,函数块里面it代指该对象,最后一行或者return为返回的结果。
preson?.let{
return 1
}
apply
apply函数块里面this代指该对象,并返回对象本身。适合进行对象的初始化或配置。
val list = mutableListOf(1, 2, 3).apply {
println("原列表:$this")
add(4)
println("修改后列表:$this")
}
println("最终列表:$list") // 输出:最终列表:[1, 2, 3, 4]
also
also()函数和let()函数相似,函数块里面it代指该对象,不同的是,返回的是对象本身。
val user = User("Alice").also {
it.age = 30
println("用户:${it.name}, 年龄:${it.age}")
}
with
with()函数是一个内联函数,它把传入的对象作为接受者,在该函数内可以使用this指代该对象来访问其公有的属性和方法。该函数的返回值为函数块最后一行或指定的return表示式。
val list = mutableListOf(1, 2, 3)
val sum = with(list) {
println("原列表:$this")
var sum = 0
for (item in this) {
sum += item
}
sum
}
println("列表元素和:$sum") // 输出:列表元素和:6
run
with和let的结合体。它可以像with()函数一样直接在函数块中使用this指代该对象,也可以像let()函数一样为对象做统一的判空处理。
二 总结
函数体里面写的时候是it和this提示就可以区分,主要还是以下两点
- 两个a开头的返回的是对象本身,其余的返回是return或者最后一行结果(lambda 表达式的结果)。
- with是内联函数,其他的是扩展函数。