欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Kotlin】高阶函数用法一(with,run,apply)

程序员文章站 2024-02-27 14:02:45
...

【Kotlin】高阶函数用法(一)

学而不思则罔,思而不学则殆

总结

函数 调用方法 提供环境 参数个数 返回值
with 直接调用 提供对象上下文 两个参数(对象+Lambda) 最后一行代码式作为返回值
run 对象调用 提供对象上下文 一个参数(Lambda) 最后一行代码式作为返回值
apply 对象调用 提供对象上下文 一个参数(Lambda) 无返回值

with

with接收两个参数:

  1. 第一个参数可以是任意类型
  2. 第二个参数是个lambda表达式
  3. 在表达式中可以直接用第一个参数的上下文,及调用相关方法
  4. 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

  1. run不能直接调用
  2. 一定要调用某个对象的run函数才行
  3. run函数只接收一个Lamdba参数,并且会在Lamdba中提供调用对象的上下文
  4. 表达式中的最后一行代码作为函数的返回值
    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

  1. apply不能直接调用
  2. 一定要调用某个对象的apply函数才行
  3. run函数只接收一个Lamdba参数,并且会在Lamdba中提供调用对象的上下文
  4. 没有返回值
    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)
    }
相关标签: Kotlin lambda