Kotlin笔记12-标准函数和静态方法-run,with,apply
7. 标准函数和静态方法
- 标准函数with,run,apply
- with
with: 参数一:任意类型的对象,参数二:Lambda表达式
序号 | Tips |
1 | Lambda表达式的最后一行作为返回值返回 |
标准格式:
val result = with(obj) {
//这里是obj的上下文
"value" //with函数的返回值
}
Example:
fun eatFruit() {
val list = listOf("Apple", "Banana", "Orange", "Pear")
val builder = StringBuilder()
builder.append("Start eating Fruits! ")
for ((index, fruit) in list.withIndex()) {
builder.append(fruit).let {
if (index != list.size - 1) it.append(" ")
}
}
builder.append(". Ate all fruits.")
val result = builder.toString()
println(result)
}
采用with:
//with优化
fun eatFruit1(){
val list= listOf("Apple","Banana","Orange","Pear")
val result= with(StringBuilder()){
append("Start eating fruits. ")
for (fruit in list){
append(fruit).append(" ")
}
append("Ate all fruits.")
toString()
}
println(result)
}
- run
run: 接受一个Lambda参数
1 | Tips |
1 | run函数不能直接调用,调用某个对象的run函数 |
标准格式:
val result = obj.run {
// 这里是obj的上下文
"value" // run函数的返回值
}
采用run:
fun eatFruit2(){
val list= listOf("Apple","Banana","Orange","Pear")
val result= StringBuilder().run {
append("Start earting fruits. ")
for (fruit in list){
append(fruit).append(" ")
}
append("Ate all fruits.")
toString()
}
println(result)
}
- apply
apply: 接受一个Lambda参数
序号 | Tips |
1 | 在某个对象上调用,在表达式中提供调用对象的上下文 |
2 | apply无法指定返回值,直接返回调用对象本身 |
标准格式:
val result = obj.apply {
// 这里是obj的上下文
}
// result == obj
采用apply:
fun eatFruit3(){
val list= listOf("Apple","Banana","Orange","Pear")
val result=StringBuilder().apply {
append("Start eating fruits. ")
for (fruit in list){
append(fruit).append(" ")
}
append("Ate all fruits.")
}
println(result)
}
实用场景 - Intent
Example:
val intent = Intent(context,SecondActivitu::class.java)
intent.putExtra("param1", "data1")
intent.putExtra("param2", "data2")
context.startActivity(intent)
apply优化:
val intent(context,SecondActivity::class.java).apply {
putExtra("param1","data1")
putExtra("param2","data2")
}
context.startActivity(intent)