• Kotlin 中 apply、let、also、run的区别


    apply

    apply 函数接收一个目标并回来该目标自身。它答应您在目标上履行一些操作,同时仍然回来原始目标。

    fun  T.apply(block: T.() -> Unit): T
    
    • 1

    T 是目标的类型,block 是一个 lambda 表达式,能够在该目标上履行一些操作。在这个 lambda 中,您能够运用 this 关键字来引证当时目标。

    val person = Person().apply {
        name = "John"
        age = 30
        address = "New York"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这个例子中,咱们创建了一个 Person 目标并在 apply 函数中设置了该目标的特色。最终回来的是这个 Person 目标自身。

    let

    let 同样是一个扩展函数,它也接收一个 Lambda 表达式作为参数。不同于 apply,在 Lambda 表达式中,let 函数将接收者目标作为 Lambda 的参数,一般用 it 作为隐式称号。let 函数的回来值是 Lambda 表达式的成果。

    fun  T.let(block: (T) -> R): R
    
    • 1

    T 是目标的类型,R 是回来值的类型,block 是一个 lambda 表达式,它对该目标进行一些操作并回来一个成果。

    val person = Person("Alice", 25)
    val ageAfterFiveYears = person.let {
        it.age + 5
    }
    
    • 1
    • 2
    • 3
    • 4

    在这个示例中,let 函数用于核算 Person 目标五年后的年纪。

    also

    also 是一个扩展函数,与 apply 相似,但有一个关键区别:also 函数的回来值是接收者目标自身,而 Lambda 表达式的参数是接收者目标,一般用 it 作为隐式称号。

    fun  T.also(block: (T) -> Unit): T
    
    • 1

    T 是目标的类型,block 是一个 lambda 表达式,能够在该目标上履行一些操作。在这个 lambda 中,您能够运用 it 关键字来引证当时目标。

    val person = Person("Alice", 25).also {
        it.name = "Bob"
        it.age = 30
    }
    
    • 1
    • 2
    • 3
    • 4

    在上述示例中,also 函数用于修正 Person 类的特色,最终回来修正后的目标。

    run

    run 是一个扩展函数,它结合了 apply 和 let 的特色。run 函数在 Lambda 表达式中直接访问接收者目标的特色和方法,同时回来 Lambda 表达式的成果。

    fun  T.run(block: T.() -> R): R
    
    • 1

    T 是目标的类型,R 是回来值的类型,block 是一个 lambda 表达式,它对该目标进行一些操作并回来一个成果。在这个 lambda 中,您能够运用 this 关键字来引证当时目标。

    val person = Person("Alice", 25)
    val greeting = person.run {
        "Hello, $name! You are $age years old."
    }
    
    • 1
    • 2
    • 3
    • 4

    在这个示例中,run 函数用于生成一个包括 Person 目标信息的字符串。

    总结

    with不怎么使用,因为它确实不防空; 经常使用的是runapply

    1. run 闭包返回结果是闭包的执行结果;apply 返回的是调用者本身。
    2. 使用上的差别:run 更倾向于做一些其他复杂逻辑操作,而 apply 更多的是对调用者自身配置。
    3. 大部分情况下,如果不是对调用者本身进行设置,我会使用 run。
  • 相关阅读:
    echarts自动播放tooltip提示框
    函数高级 — 默认参数、占位参数、函数重载
    【代码随想录】【回溯算法】补day25:组合总和,电话号码的总和
    记一次内部分享——瞎扯淡
    Mongo知识点整理
    卡码网语言基础课 |句子缩写
    webpack proxy http-proxy-middleware header头丢失
    location rewrite
    笔记整体梳理
    狂神详讲Linux
  • 原文地址:https://blog.csdn.net/Billy_Zuo/article/details/133904793