学而不思则罔,思而不学则殆
函数 | 调用方法 | 提供环境 | 参数个数 | 返回值 |
---|---|---|---|---|
with | 直接调用 | 提供对象上下文 | 两个参数(对象+Lambda) | 最后一行代码式作为返回值 |
run | 对象调用 | 提供对象上下文 | 一个参数(Lambda) | 最后一行代码式作为返回值 |
apply | 对象调用 | 提供对象上下文 | 一个参数(Lambda) | 无返回值 |
with接收两个参数:
- 第一个参数可以是任意类型
- 第二个参数是个lambda表达式
- 在表达式中可以直接用第一个参数的上下文,及调用相关方法
- lambda中最后一句是返回值
val result = with(StringBuilder(), {
//lambda表达式中可以直接用StringBuilder()的方法
append("start").append(",")
list.forEach { append(it).append(",") }
append("end")
toString()//返回值
})
println(result)
val result1 = with(StringBuilder()) {
//lambda表达式中可以直接用StringBuilder()的方法
append("start").append(",")
list.forEach { append(it).append(",") }
append("end")
toString()//返回值
}
println(result1)
class java.lang.String
start,One,Two,Three,Four,end
class java.lang.String
start,One,Two,Three,Four,end
- run不能直接调用
- 一定要调用某个对象的run函数才行
- run函数只接收一个Lamdba参数,并且会在Lamdba中提供调用对象的上下文
- 表达式中的最后一行代码作为函数的返回值
val list = listOf<String>("One", "Two", "Three", "Four")
val result = StringBuilder().run({
//lambda表达式中可以直接用StringBuilder()的方法
append("start").append(",")
list.forEach { append(it).append(",") }
append("end")
toString()//作为返回值
})
println(result)
val result1 = StringBuilder().run {
//lambda表达式中可以直接用StringBuilder()的方法
append("start").append(",")
list.forEach { append(it).append(",") }
append("end")
toString()//作为返回值
}
println(result1)
class java.lang.String
start,One,Two,Three,Four,end
class java.lang.String
start,One,Two,Three,Four,end
- apply不能直接调用
- 一定要调用某个对象的apply函数才行
- run函数只接收一个Lamdba参数,并且会在Lamdba中提供调用对象的上下文
- 没有返回值
val list = listOf<String>("One", "Two", "Three", "Four")
val result = StringBuilder().apply({
//lambda表达式中可以直接用StringBuilder()的方法
append("start").append(",")
list.forEach { append(it).append(",") }
append("end")
toString()//作为返回值
})
println(result.toString())
val result1 = StringBuilder().apply {
//lambda表达式中可以直接用StringBuilder()的方法
append("start").append(",")
list.forEach { append(it).append(",") }
append("end")
toString()//作为返回值
}
println(result1.toString())
class java.lang.StringBuilder
start,One,Two,Three,Four,end
class java.lang.StringBuilder
start,One,Two,Three,Four,end
生成Intent
fun test(one: String, two: String): Unit {
val intent = Intent(this, MainActivity::class.java).apply {
putExtra("one", one)
putExtra("two", two)
}
startActivity(intent)
}