1、let
在let作用域内默认可使用it指代调用的对象,也可自定义命名。有返回值,返回值为最后一行或指定return表达式
val count = "hello".let {
it.plus("1")
print("${it.length}")
it.length //返回值
}
自定义命名
val count = "hello".let { strHello ->
strHello.plus("1")
print("${strHello.length}")
strHello.length
}
2、with
with(传参数)作用域内可使用this指代该传入的对象,使用其属性和方法。有返回值,返回值为最后一行
val hello = "hello"
val world = "world"
val pair = Pair(hello, world)
val numWorld = with(pair){
val lengthHello = this.first.length
second.length //返回值
}
3、run
run作用域内使用this指代调用者对象。有返回值,返回值为最后一行
val hello = "hello"
val world = "world"
val pair = Pair(hello, world)
val strWorld = pair.run {
val lengthHello = this.first.length
val lengthWorld = second.length
second //返回值
}
4、also
also作用域内使用it指代调用者。有返回值,返回值为调用者自身。
val hello = "hello"
val world = "world"
val pair = Pair(hello, world)
val strReceive: Pair<String, String> = pair.also {
val lengthHello = it.first.length
val lengthWorld = it.second.length
}
strReceive.first.showToast()
因为also返回值为对象自身,所以也可以修改以上代码为链式调用。
val hello = "hello"
val world = "world"
val pair = Pair(hello, world)
pair.also {
val lengthHello = it.first.length
val lengthWorld = it.second.length
}.first.showToast()
5、apply
apply作用域内使用this指代该对象。有返回值,返回值为该对象自身。
//数据类
data class Person(
var name: String = "",
var age: Int = 0
)
val modifyPerson = Person().apply {
name = "aaa"
age = 10
}
modifyPerson.name.showToast() //此时name="aaa"
?
?
|