kotlin 中作用域函数的使用

问题描述 投票:0回答:1

我正在研究 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)
android kotlin scope
1个回答
0
投票

Kotlin 文档中已经对此进行了解释。

基本上,这些函数都执行相同的操作:执行 对象上的代码块。不同的是这个对象的方式 在块内变得可用以及整个的结果是什么 表达式为。

由于作用域函数之间有许多相似之处,为您的用例选择正确的函数可能很棘手

它将帮助您实现所有差异

简短指南

  • 在不可空对象上执行 lambda:
    let
  • 在局部范围内引入表达式作为变量:
    let
  • 对象配置:
    apply
  • 对象配置和计算结果:
    run
  • 需要表达式的运行语句:非扩展
    run
  • 附加效果:
    also
  • 对对象进行分组函数调用:
    with
© www.soinside.com 2019 - 2024. All rights reserved.