在Kotlin中将lambda作为参数传递

时间:2019-07-12 02:56:48

标签: kotlin lambda

我刚刚开始学习Kotlin,我有以下示例(将Lambda作为参数传递)

import java.math.BigDecimal

//fun sum(numbers: List<BigDecimal>)=
//  fold(numbers,BigDecimal.ZERO){acc,num-> acc+num}

fun sum(numbers: List<BigDecimal>)=
    fold(numbers, BigDecimal.ZERO,{acc,num->acc+num})

fun prod(numbers: List<BigDecimal>)=
  fold(numbers,BigDecimal.ONE){acc,num-> acc*num}

private fun fold(
      numbers:List<BigDecimal>,
      start:BigDecimal,
      accumulator:(BigDecimal, BigDecimal)->BigDecimal
):BigDecimal{
    var acc= start
    for(num in numbers){
        acc=accumulator(acc,num)
    }
    return acc
}
fun main(args: Array<String>) {
    fun BD(i:Long)= BigDecimal.valueOf(i)
    val numbers=listOf(BD(1),BD(2),BD(3),BD(4))
    println(sum(numbers))
    println(prod(numbers))
 }

现在,检查功能sum(一个和另一个都被注释)。据我了解,未注释的代码是这样写的:fold接受三个参数,其中第三个参数是一个函数,因此我们传递一个lambda。那就是我写的方式。

但是注释的sum(和prod函数)在两个第一个参数之后在之后传递lambda。

fun sum(numbers: List<BigDecimal>)=
 fold(numbers,BigDecimal.ZERO){acc,num-> acc+num} //<=WHY outside the ()??

为什么是这种符号?有人可以向我解释吗?

0 个答案:

没有答案