let,with,apply,run,also

run、with 以及 apply 通过关键字 this 引用上下文对象。
let 及 also 将上下文对象作为 lambda 表达式参数。

— 返回值

根据返回结果,作用域函数可以分为以下两类:
apply 及 also 返回上下文对象。
let、run 及 with 返回 lambda 表达式结果.

Let的使用:

Let可以用于判空操作,比如:

//java
if(a!=null){
	.....
}
//kotlin
a?.{
	......
}

以上这样就可以省去if判断。
除此之外,let括号内it表示该对象,在let内执行对象操作时,it不可省去

fun main(){

    var a=AAA()
    
    var x1=a.let {
        it.m1()
        it.m2()
        it.s
    }
}
class AAA{

    var s:String="111"

    fun m1(){
        print("m1\n")
    }

    fun m2(){
        print("m2\n")
    }
}

with的使用

跟let差别不多,with用this表示操作对象,在作用域内,this可以省去

fun main(){

    var a=AAA()
    
    with(a){
        m1() //this.m1()
        m2() //this.m2
        s   //this.s
    }
}

class AAA{

    var s:String="111"

    fun m1(){
        print("m1\n")
    }

    fun m2(){
        print("m2\n")
    }
}

run的使用

run的用法其实和let差不多,就是把it换成了this

fun main(){


    var a=AAA()

    a.run {
        m1()//this.m1()
    }
}



class AAA{

    var s:String="111"

    fun m1(){
        print("m1\n")
    }

    fun m2(){
        print("m2\n")
    }
}

apply的使用

返回的对象时AAA()这个类的对象实例

fun main(){
    
    var a=AAA().apply {
        m1()
        s
    }
    println(a)

}

class AAA{

    var s:String="111"

    fun m1(){
        print("m1\n")
    }

    fun m2(){
        print("m2\n")
    }
}

also的使用

返回的对象时AAA()这个类的对象实例

fun main(){

    var a=AAA().also {
        it.m1()
        it.s
    }
    println(a)

}

class AAA{

    var s:String="111"

    fun m1(){
        print("m1\n")
    }

    fun m2(){
        print("m2\n")
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值