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

时间:2017-11-03 17:17:57

标签: kotlin

这是Kotlin相当于在Coursera上从Scala MOOC获取的功能。它返回一个函数,该函数在范围(a..b)

上应用给定的映射器(f)
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显示了这些错误。如何从这里返回功能。 enter image description here

2 个答案:

答案 0 :(得分:3)

当您定义命名函数(fun foo(...))时,不能将其名称用作表达式。

相反,你应该制作一个function reference

return ::sumF

另请参阅:Why does Kotlin need function reference syntax?

答案 1 :(得分:2)

您必须使用::将其表达为函数引用。

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
}