Kotlin中调用forEach函数时的特殊写法

Kotlin中的forEach函数声明是这样的:

inline fun ByteArray.forEach(action: (Byte) -> Unit) (source)

就是说这个函数需要接受一个action参数,所以他的调用写法应该是这样的:

ints.forEach(fun(value: Int) {
        if (value == 0) return
        print(value)
    })

在forEach后加一个括号,括号里放参数,但是我又发现还有下面这种特殊的写法:

ints.forEach {
        if (it == 0) return@forEach
        print(it)
    }

非常疑惑,经过查找,原来这是一个Kotlin一个特殊的约定:(https://www.kotlincn.net/docs/reference/lambdas.html

https://www.kotlincn.net/docs/reference/lambdas.html

将 lambda 表达式传给最后一个参数

在 Kotlin 中有一个约定:如果函数的最后一个参数接受函数,那么作为相应参数传入的 lambda 表达式可以放在圆括号之外:

val product = items.fold(1) { acc, e -> acc * e }

如果该 lambda 表达式是调用时唯一的参数,那么圆括号可以完全省略:

run { println("...") }

这种约定虽然可以使编程简洁,但是给不熟悉的人带来了困扰,算是有利有弊吧,但我还是希望这种“约定”少一些,减少一下学习成本:)

猜你喜欢

转载自blog.csdn.net/qq_34352738/article/details/81837525