引用:
var info : String ?= "Allen"
fun method1(name : String?) : String{
return "我是方法1"
}
fun method2(name : String) : Int{
return 2;
}
fun method3(age : Int) : Boolean{
return true
}
一. apply函数
info.apply {
method1(this)
}.apply {
println(this)
}.apply {
println(this)
}
说明:
- apply返回值类型永远是info本身,即调用它的对象本身
- apply 有this,this == info本身
- 由于返回值都是它本身,因此可以使用链式调用
参考:
上面这几种方式效果一样。
另外:因为返回值都是同一个文件,所以可以这么写,表示都对同一个文件进行操作
二. let函数
案例:
说明: - let返回值类型随匿名函数 (即lambda表达式) 的最后一行代码的改变而改变
- let函数的匿名函数中持有的是 it == 调用它的对象本身
name1.let {
method1(it) //返回值是String
}.let {
method2(it) //返回值是Int
}.let {
method3(it) //返回值是Boolean
}
//最终返回值是Boolean
三. run函数
案例:配合具名函数
输出:
结合匿名函数(也就是lambda):
输出:
说明:
- run函数返回值类型随匿名函数 (即lambda表达式) 的最后一行代码的改变而改变
- 持有this == 调用它的对象本身,跟apply一样
四. with函数
具名操作:
输出:
匿名操作:
说明:跟run函数几乎一样,只是使用的操作不一样,with(参数){},参数.run{}
五. also函数
案例:
说明:跟apply的差别是 apply里面是this == 调用它的对象本身,而also里面是 it = =调用它的对象本身
六. takeIf函数
案例和说明:
七. takeUnless
与takeIf相反
案例和说明:
总结:
- apply:返回值永远是调用它的对象本身,且持有this == 调用它的对象本身
- let:返回值与匿名函数(lambda)的最后一行代码有关,持有it == 调用它的对象本身
- run:返回值与匿名函数(lambda)的最后一行代码有关,持有this == 调用它的对象本身
- with:跟run一样
- also:返回值永远是调用它的对象本身,且持有it == 调用它的对象本身
- takeIf : 函数内为true则返回调用它的对象本身,false则返回null,持有it == 调用它的对象本身,结合?: 使用
- takeUnless : 函数内为true则返,回null,false则返回调用它的对象本身,持有it == 调用它的对象本身,结合 it.isNullOrBlank()一起使用