从另一个Kotlin函数返回一个递归函数

这是从Coursera的Scala MOOC中取得的Kotlin等价物。 它返回一个函数,将给定的映射器(f)应用于范围(a..b)

fun sum(f: (Int) -> Int): (Int, Int) -> Int { fun sumF(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sumF(a + 1, b) return sumF } 

但IntelliJ显示这些错误。 我怎样才能从这里返回的功能。 在这里输入图像描述

当你定义一个命名的函数( fun foo(...) )时,你不能用它的名字作为表达式。

相反,你应该做一个函数的引用 :

 return ::sumF 

另请参阅: 为什么Kotlin需要函数参考语法?

你必须使用::来表示它作为函数的参考。

 fun sum(f: (Int) -> Int): (Int, Int) -> Int { fun sumF(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sumF(a + 1, b) return ::sumF }