【Kotlin】高阶函数用法一(with,run,apply)
程序员文章站
2024-02-27 14:02:45
...
学而不思则罔,思而不学则殆
总结
函数 | 调用方法 | 提供环境 | 参数个数 | 返回值 |
---|---|---|---|---|
with | 直接调用 | 提供对象上下文 | 两个参数(对象+Lambda) | 最后一行代码式作为返回值 |
run | 对象调用 | 提供对象上下文 | 一个参数(Lambda) | 最后一行代码式作为返回值 |
apply | 对象调用 | 提供对象上下文 | 一个参数(Lambda) | 无返回值 |
with
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函数才行
- 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不能直接调用
- 一定要调用某个对象的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)
}
上一篇: Nunit-Writing Tests
下一篇: 详解Pytest测试用例运行模式
推荐阅读
-
【Kotlin】高阶函数用法一(with,run,apply)
-
Kotlin let、with、run、apply、also函数的使用
-
[译]掌握Kotlin中的标准库函数: run、with、let、also和apply
-
精通Kotlin标准函数:run、with、let、also和apply
-
Kotlin学习系列——标准函数(with、let、run、apply、also)
-
Kotlin内置函数之 let 、also、apply、run、with
-
Kotlin的作用域函数 let、also、with、run、apply
-
Kotlin标准函数:run, with, let, also and apply分析
-
Kotlin学习系列——标准函数(with、let、run、apply、also)
-
kotlin内置函数let、also、with、run、apply记录