Kotlin 匿名函数的问题

    val numbers1 = mutableListOf(0, 1, 2, 3, 4)
    val numbers2 = mutableListOf(5, 6, 7, 8, 9)
    println(\"numbers : ${numbers1.zip(numbers2) { a, b -> a + b }}\")
    println(\"numbers add {} : ${numbers1.zip(numbers2) { a, b -> { a + b } }}\")

    //println
    //numbers : [5, 7, 9, 11, 13]
    //numbers add {} : [() -> kotlin.Int, () -> kotlin.Int, () -> kotlin.Int, () -> kotlin.Int, () -> kotlin.Int]

今天无意遇到一个问题,使用 zip 时一直报 null,检查好久后才发现多了一个花括号。
看了半天始终没明白,为什么匿名函数内多加一个花括号会导致返回 Unit?

相关文章

5 thoughts on “Kotlin 匿名函数的问题

  1. 确保 3 点
    1.lamda 表达式会默认返回最后一个表达式的值,并推导类型,比如 a+b 就是一个表达式,结果是 Int,所以 kotlin 推导出值是 Int 类型。
    2.{a +b}就不是 Int 类型了,它也是一个 lamda 表达式,类型应该是一个()->Int 的函数类型,所以这里编译器推导出类型为()->Int 。
    3.既然用了 kotlin 就不要用 java 的 lambda 的写法了,两者不一样

发表评论

电子邮件地址不会被公开。 必填项已用*标注