Kotlin中Lambda的十三种形式

本文介绍了 Kotlin 中 Lambda 的十三种使用形式,包括不同参数和返回类型的 Lambda 函数定义及调用方式,适合初学者快速掌握 Kotlin Lambda 的使用技巧。
//Kotlin中Lambda的十三种形式

fun main(args: Array<String>) {
    //函数的声明
    var method1: () -> Unit
    var method2: (Int, Int) -> Int
    var method3: (String, Boolean) -> Any?
    var method4: (Int, Double, Long, String?) -> Boolean
    // method4(1, 34.4, 345, null)

    //函数的实现
    //函数的 声明 + 函数的  实现
    // :(参数) -> 返回  方式一()
    // = {参数 -> 返回} 方式二{}

    //方式一
    //这是一个函数,只不过此函数,没有输入参数和输出参数
    val method5 = { println("yuknight") }
    method5() //调用method5函数
    method5.invoke() //method5函数调用自身
    //方式二
    //这是一个函数,只不过此函数,没有输入参数, 有输出参数String类型
    val method6 = { "yuknight" }
    println(method6())
    println(method6.invoke())
    //方式三
    //这是一个函数,只不过此函数,输入参数为2个Int类型, 输出参数String类型
    val method7 = { number1: Int, number2: Int -> number1.toString() + number2.toString() }
    println(method7(5, 2))
    //方式四 (Int, Int)->Int
    var method8 = { number1: Int, number2: Int -> number1 + number2 }
    // (Int, Int) -> Int 省略不写,自动推断类型
    //var method8: (Int, Int) -> Int = { number1: Int, number2: Int -> number1 + number2 }
    //方式五
    var method9: (Int) -> String //函数的声明
    method9 = fun(value: Int): String = value.toString() + "yuknight" //函数的实现
    println(method9.invoke(22))
    //方式六  声明 + 实现
    var method10: (Int, Int) -> String = fun(number1, number2) = number1.toString() + number2.toString()
    // println(method10.invoke(2,3))
    println(method10(2, 3))
    if (method10(2, 3) is String) println("输出是String") else println("输出不是String")
    //方式七
    var method11: (String, String) -> Unit = { aStr, bStr -> println("aStr:$aStr, bStr:$bStr") }
    method11("122", "333")
    method11.invoke("122", "333")
    //方式八
    var method12: (String) -> Int = {
        println("传入的是:$it")
        34    //最后一行返回值
    }
    var r = method12.invoke("yuknght")
    println(r)
    //方式九
    var method13: (Int) -> Unit = {
        when (it) {
            1 -> println("传入的值是1")
            in 20..60 -> println("传入的值是20到60之间的数")
            else -> println("都不满足")
        }
    }
    method13.invoke(30)
    //方式十
    var method14: (Int, Int) -> Unit = { _, number2 ->
        println("第二个参数是: $number2")
    }
    method14(3, 90)
    //方式十一
    var method15 = { str: Any -> str }
    println(method15("yuknight"))
    println(method15(23))
    println(method15(false))
    //方式十二
    var method16 = { sex: Char ->
        if (sex == '男') println("代表是先生")
        else if (sex == '女') println("代表是女生")
        else println("未知人类")
    }
    method16.invoke('男')
    //方式十三
    var method17:String.()->Unit ={
        println("调用对象:$this")
    }
    "yuknight".method17() //对String类型对象进行扩展

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu-Knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值