scope
大约 1 分钟
scope
class ScopeFun {
private fun customPrint(s: String) {
print(s.uppercase())
}
//let 函数把当前对象作为闭包的 it 参数,返回值是函数里面最后一行,或者指定 return
//let 函数跟 run 函数的区别是:let 函数在函数内可以通过 it 指代该对象
@Test
fun letFun(){
val empty = "test".let { // 1
customPrint(it) // 2
it.isEmpty() // 3
}
println(" is empty: $empty")
}
//run 函数类似于 apply 函数,但是 run 函数返回的是最后一行的值
@Test
fun runFun(){
fun getNullableLength(ns: String?) {
println("for \"$ns\":")
ns?.run { // 1
println("\tis empty? " + isEmpty()) // 2
println("\tlength = $length")
length // 3
}
}
getNullableLength(null)
getNullableLength("")
getNullableLength("some string with Kotlin")
}
//with函数会把对象结构,可以直接使用对象的属性
@Test
fun withFun(){
val configuration = Configuration(host = "127.0.0.1", port = 9000)
with(configuration) {
println("with scope$host:$port")
}
// instead of:
println("${configuration.host}:${configuration.port}")
}
//apply 函数是指在函数块内可以通过 this 指代该对象,返回值为该对象自己
@Test
fun applyFun(){
val jake = Person() // 1
val stringDescription = jake.apply { // 2
name = "Jake" // 3
age = 30
}.toString() // 4
println(stringDescription)
}
//also 对于执行一些将上下文对象作为参数的操作很有用。 对于需要引用对象而不是其属性与函数的操作,或者不想屏蔽来自外部作用域的 this 引用时,请使用 als
@Test
fun alsoFun(){
val jake = Person("Jake", 30, "Android developer") // 1
.also { // 2
writeCreationLog(it) // 3
}
println(jake)
}
}