在Kotlin中使用作用域函数

64jmpszr  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(114)

我正在使用Kotlin中的作用域函数。我找到了许多使用这些函数的文章和示例。但是没有任何东西可以解释在哪些场景下使用哪些功能。还有它和这个关键字**之间的区别是什么,有人能解释一下区别吗?这里有一个简单的例子,使用范围函数来完成类似的任务。如果类似的任务可以用不同的函数完成,那么为什么要使用不同的作用域函数?

fun main() {
    val person = Person()
    person.let {
        it.name = "let HelloWorld"
        println(it.name)
        println("let $it")
    }
    println("let.. $person")
    with(person) {
        name = "With HelloWorld"
        println(this.name)
        println(this)
    }
    println(person)
    person.run {
        name = "Run HelloWorld"
        println(this.name)
        println(this)
    }
    println(person)
    person.apply {
        name = "apply HelloWorld"
        println(this.name)
        println(this)
    }
    println(person)
    person.also {
        it.name = "Also HelloWorld"
        println(it.name)
        println(it)
    }
    println(person)
}

data class Person(var name:String="", var age:Int = 0)
gopyfrb3

gopyfrb31#

在Kotlindocumentation中已经解释过了。
基本上,这些函数都执行相同的操作:在对象上执行代码块。不同的是这个对象如何在块中变得可用,以及整个表达式的结果是什么。
由于作用域函数之间有许多相似之处,因此为您的用例选择正确的作用域函数可能很棘手
它将帮助你实现所有的差异。
简短指南

  • 在非空对象上执行lambda:let
  • 在局部作用域中引入一个表达式作为变量:let
  • 对象配置:apply
  • 对象配置和计算结果:run
  • 运行需要表达式的语句:非扩展run
  • 附加效果:also
  • 函数调用对象:with

相关问题