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?
1
fansangg 2020-04-16 01:24:33 +08:00
百度一下闭包
|
2
maninfog 2020-04-16 02:55:02 +08:00 via iPhone
确保 3 点
1.lamda 表达式会默认返回最后一个表达式的值,并推导类型,比如 a+b 就是一个表达式,结果是 Int,所以 kotlin 推导出值是 Int 类型。 2.{a +b}就不是 Int 类型了,它也是一个 lamda 表达式,类型应该是一个()->Int 的函数类型,所以这里编译器推导出类型为()->Int 。 3.既然用了 kotlin 就不要用 java 的 lambda 的写法了,两者不一样 |
3
kmyzzy 2020-04-16 04:55:54 +08:00
a+b 的类型是 int ;{ a + b } 的类型是 Unit
|