Kotlin:具有递归的高阶函数

我必须创建一个高阶函数,该函数返回一个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,而我不知道问题出在哪里。有人可以帮我吗?

pencil1989 回答:Kotlin:具有递归的高阶函数

您的函数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,rating)
    return ::produce
}
本文链接:https://www.f2er.com/2940922.html

大家都在问