with函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式,with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式的最后一行代码作为返回值返回。一句话说就是:with (XXX){do something,都是XXX的do something}
/**
* You can edit, run, and share this code.
* play.kotlinlang.org
*/
fun main() {
println("Beginning:Hello, world!!!")
val list=listOf("Apple","Banana","Orange","Pear","Grape")
val builder=StringBuilder()
builder.append("Start eating fruits.\n")
for(fruit in list){
builder.append(fruit).append("\n")
}
builder.append("Ate all fruits.")
val result=builder.toString()
println(result)
//以下的代码使用with,演示with的用法
//with函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式
//with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式的最后一行代码
//作为返回值返回。一句话说就是:with (XXX){do something,都是XXX的do something}
val list_w=listOf("Apple","Banana","Orange","Pear","Grape")
val result_w=with(StringBuilder()){
append("Start eating fruits.\n")
for(fruit in list_w){
append(fruit).append("\n")
}
append("Ate all fruits.")
toString()
}
println(result_w)
}
运行结果:
Beginning:Hello, world!!!
Start eating fruits.
Apple
Banana
Orange
Pear
Grape
Ate all fruits.
Start eating fruits.
Apple
Banana
Orange
Pear
Grape
Ate all fruits.
这两段代码效果一样,和明显的是用with 代码更简洁一些。(我个人觉得也没好到哪里去)
标准函数run 和标准函数apply 的使用和with的作用都是类似的,但是有点细微差别,刚开始学个大概,我们就知道大概差不多就ok了,所以代码就略了。