with

作用:可以在连续调用同一个对象的多个方法时让代码变得更简便

标准形式:

1
2
3
4
val result = with (obj){
//这里是obj的上下文
"value"//with函数返回值
}

实例:

1
2
3
4
5
6
7
8
9
10
val list= listOf("Apple","Banana","Pear")
val result=with(StringBuilder()){
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all Fruits")
toString()
}
println(result)

run

作用:同with相同只是通常不会直接调用而是在对象的基础上调用

标准形式:

1
2
3
4
val result =obj.run{
//这里是obj的上下文
"value"//run函数返回值
}

实例:

1
2
3
4
5
6
7
8
9
10
val list= listOf("Apple","Banana","Pear")
val result=StringBuilder().run{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all Fruits")
toString()
}
println(result)

apply

作用:作用和run类似只是无法指定返回值

标准形式:

1
2
3
4
val result =obj.apply{
//这里是obj的上下文
}
result==obj

实例:

1
2
3
4
5
6
7
8
9
val list= listOf("Apple","Banana","Pear")
val result=StringBuilder().apply{
append("Start eating fruits.\n")
for(fruit in list){
append(fruit).append("\n")
}
append("Ate all Fruits")
}
println(result.toString())

利用Intent传递数据时也可以使用apply函数

1
2
3
4
5
val intent=Intent(context,SecondActivity::class.java).apply{
putExtra("param1","data1")
putExtra("param2","data2")
}
context.startActivity(intent)

repeat

传入一个值n然后lambda表达式中的内容执行n遍