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

【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)
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值