美文网首页kotlin
kotlin:四大函数表达式

kotlin:四大函数表达式

作者: 宋song一 | 来源:发表于2018-08-12 22:33 被阅读71次

1.Apply(使用this代表当前对象,返回值是当前对象)

* 1.任意对象 任意类型都有apply扩展函数
* 2.apply函数参数是函数类型 带接受者(T)的函数字面值
* 3.apply函数返回值是当前对象本身

源码如下

public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

2.Let(使用it代表当前对象,返回值是表达式最后一行)

  • 1.let函数给任意类型添加的扩展函数

  • 2.let函数参数是函数类型 函数参数就是自己本身

  • 3.函数参数返回值是任意类型

  • 4.let函数返回值就是block函数的返回值

    • let和apply最大的区别:函数参数不同(定义位置).apply是定义在对象里面的函数,let为普通函数
      

源码

public inline fun <T, R> T.let(block: (T) -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block(this)
}

3.With(使用this代表当前对象,返回值是最后一行)

  • 1.with函数是一个独立的函数 可以独立使用

  • 2.with函数有两个参数 第一个可以传递任意类型 第二个参数:带接收者的函数字面值 ,接收者是第一个参数

  • 3.with函数返回值就是第二个函数参数返回值

  • with相当于是apply和let的结合.

  • with()

    源码

    public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
        contract {
            callsInPlace(block, InvocationKind.EXACTLY_ONCE)
        }
        return receiver.block()
    }
    

4.Run(代码块)

  • 和apply函数类似 区别就是函数的返回值

  • run函数返回值就是block函数的返回值

  • run函数有两个参数 第一个可以传递任意类型 第二个参数:带接收者的函数字面值 ,接收者是第一个参数

源码

public inline fun <T, R> T.run(block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block()
}

相关文章

网友评论

    本文标题:kotlin:四大函数表达式

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