我刚刚开始学习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 ()??
为什么是这种符号?有人可以向我解释吗?