Kotlin 如何将长类型的范围与lambda表达式相乘

Kotlin 如何将长类型的范围与lambda表达式相乘,kotlin,Kotlin,如何编写一个lambda表达式,它接受两个长参数作为范围边界,并返回该范围内所有数字的乘法 val lambda: (Long, Long) -> Long = { x, y -> for (i in x..y) {x * y}//I don't know what to fix in this block } 您可以使用该函数,它在O(n-1)中执行操作: vallambda:(Long,Long)->Long={x,y->(x..y).减少{a,b->a*b} 但不幸的是,如

如何编写一个lambda表达式,它接受两个长参数作为范围边界,并返回该范围内所有数字的乘法

val lambda: (Long, Long) -> Long = { x, y -> for (i in x..y) {x * y}//I don't know what to fix in this block }
您可以使用该函数,它在O(n-1)中执行操作:

vallambda:(Long,Long)->Long={x,y->(x..y).减少{a,b->a*b}
但不幸的是,如果集合中有0个元素或1个元素,它将抛出一个异常,因此我建议使用fold函数,它将需要再进行一次迭代,即O(n):

vallambda:(Long,Long)->Long={x,y->(x..y).折叠(1){a,b->a*b}

它应该并且将抛出作为
lambda(3L,1L)
传递的元素,因为没有元素,而不是1。

我觉得
reduce
可以正常工作。无需担心任何异常,因为lamdba签名需要2个参数,即使它们相同,范围运算符也会处理它。您是对的,它应该抛出异常而不是返回1,因为没有元素。范围问题应该单独处理。因为如果通过
lambda(3L,1L)
,使用
fold(1)
实现,它将返回1,这不是处理异常场景的正确方法。