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
 

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

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

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

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

run { println("...") }

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值