我必须创建一个高阶函数,该函数返回一个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/