从另一个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 }