我正在使用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)
1条答案
按热度按时间gopyfrb31#
在Kotlindocumentation中已经解释过了。
基本上,这些函数都执行相同的操作:在对象上执行代码块。不同的是这个对象如何在块中变得可用,以及整个表达式的结果是什么。
由于作用域函数之间有许多相似之处,因此为您的用例选择正确的作用域函数可能很棘手
它将帮助你实现所有的差异。
简短指南
let
let
apply
run
run
also
with