美文网首页
Kotlin常用作用域函数(let、run、apply、also

Kotlin常用作用域函数(let、run、apply、also

作者: 椰子 | 来源:发表于2019-01-02 17:38 被阅读13次

    val user = User("11", "1111", PlayerViewType.BLUE)

    let、run

            //let与run都会返回闭包的执行结果,区别在于let有闭包参数,而run没有闭包参数
            val letResult = user.let { userLet: User -> "let::${userLet.javaClass}" }
            println(letResult) //打印出let::包名
            //let中的闭包参数user只有一个时可以省略不写(谁调用的let,闭包参数就是谁),然后用it来替代它
            val letResult2 = user.let { "let2::${it.javaClass}" }
            println(letResult2)
    
            //run没有闭包参数,需要通过this来指代外层调用它的对象,这是和let唯一的区别
            val runResult = user.run { "run::${this.javaClass}" }
            println(runResult)
    

    also、apply

            //also与apply都不返回闭包的执行结果,区别在于also有闭包参数,而apply没有
            user.also {
                println("also::${it.javaClass}") //打印出also::包名
            }
            user.apply {
                println("apply::${this.javaClass}")
            }
            // public inline fun <T> T.also(block: (T) -> Unit): T
            // public inline fun <T> T.apply(block: T.() -> Unit): T
            // 因为返回的是个T,所以可以一直链式调用下去,所以also和apply应用于链式调用情况
            user.also {
                println("also::${it.javaClass}")
            }.apply {
                println("apply::${this.javaClass}")
            }.name = "2222"
    

    take、takeUnless

            //takeIf的闭包返回一个判断结果,为false时,takeIf函数会返回空
            //takeUnless与takeIf正好相反,闭包的判断结果为true时,函数会返回空
            user.takeIf {
                it.id.length > 0
            }?.also {
                println("id为${it.id}")
            } ?: println("id为空")
    
            user.takeUnless {
                it.id.length > 0
            }?.also {
                println("id为空")
            } ?: println("id为${user.id}")
    

    with

    //with比较特殊,不是以扩展方法的形式存在的,而是一个顶级函数
            //等价于user.apply{this.name = "with"}的效果
            //应用场景:比如安卓中可以传入不同的view,进行同样的操作
            with(user){
                this.name = "with"
            }
    

    相关文章

      网友评论

          本文标题:Kotlin常用作用域函数(let、run、apply、also

          本文链接:https://www.haomeiwen.com/subject/axuzlqtx.html