在Kotlin中使用作用域函数

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

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

  1. fun main() {
  2. val person = Person()
  3. person.let {
  4. it.name = "let HelloWorld"
  5. println(it.name)
  6. println("let $it")
  7. }
  8. println("let.. $person")
  9. with(person) {
  10. name = "With HelloWorld"
  11. println(this.name)
  12. println(this)
  13. }
  14. println(person)
  15. person.run {
  16. name = "Run HelloWorld"
  17. println(this.name)
  18. println(this)
  19. }
  20. println(person)
  21. person.apply {
  22. name = "apply HelloWorld"
  23. println(this.name)
  24. println(this)
  25. }
  26. println(person)
  27. person.also {
  28. it.name = "Also HelloWorld"
  29. println(it.name)
  30. println(it)
  31. }
  32. println(person)
  33. }
  34. data class Person(var name:String="", var age:Int = 0)
gopyfrb3

gopyfrb31#

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

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

相关问题