我必须创建一个高阶函数,该函数返回一个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,而我不知道问题出在哪里。有人可以帮我吗?
答案 0 :(得分:1)
您的函数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
}