recursion - Kotlin:具有递归的高阶函数

标签 recursion kotlin higher-order-functions

我必须创建一个高阶函数,该函数返回一个lambda以学习Kotlin的函数式编程。

这是类

class Product (val productName : String, val price : Double, val rating : Int) {
    override fun toString () = "$productName, $price, $rating"
}

这是我的职责
fun productFactory (productName: String , rating : Int) : (Double) -> Product {

    val x : (Double) -> Product = productFactory(productName, rating)
    return x
}

这就是我所谓的功能
val cheese = productFactory("Gouda", 5)
val product = cheese(4.99)

尽管它似乎可以与所需的构造函数一起使用,但它会引起StackOverflowError,我不知道问题出在哪里。有谁能够帮助我?

最佳答案

您的函数productFactory递归调用自身而无法退出递归,因此它将始终导致堆栈溢出。

它返回的函数肯定不应该是本身,因为行为是不同的。

您可以将返回的函数定义为lambda:

fun productFactory (productName: String , rating : Int) : (Double) -> Product {
    return { price -> Product(productName, price, rating) }
}

或使用函数语法并使用::运算符返回函数:
fun productFactory (productName: String , rating : Int) : (Double) -> Product {
    fun produce(price: Double) = Product(productName, price, rating)
    return ::produce
}

关于recursion - Kotlin:具有递归的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288219/

相关文章:

java - 使用递归实现编辑距离方法会导致对象堆错误

generics - Kotlin 泛型继承

javascript - 替换 Javascript 中的 "||"条件

search - 如何在搜索树上定义映射和折叠?

templates - Kotlin 中的动态评估模板字符串

javascript - 有人可以向我解释这个功能是如何工作的吗?

javascript - 如何将同步和异步递归函数转换为JavaScript中的迭代

python - 如何将 while 循环变成递归方法?

memory - 与 Java 7 相比,运行相同递归代码的相同线程在 Java 8 中似乎消耗更多的堆栈内存

android - Kotlin 变量被初始化两次