Kotlin Curry函数-如何调用3个(或多个)函数?
我试图在kotlin中使用一个函数,这样我就可以这样调用它Kotlin Curry函数-如何调用3个(或多个)函数?,kotlin,currying,Kotlin,Currying,我试图在kotlin中使用一个函数,这样我就可以这样调用它 myAdditionFunction(1)(2)(3) 此调用将返回6,因为1+2+3=6 我只需要它对所有的数字进行加法。事实上,我真的很想让它成为一个建设者 模式,但仍在尝试了解咖喱函数是如何工作的。以下是我到目前为止的情况: fun myAdditionFunction(x: Int) { { y: Int -> x + y } 这适用于两个参数。因此,myAdditionFunction(1)(2)将打印3 我
myAdditionFunction(1)(2)(3)
此调用将返回6,因为1+2+3=6
我只需要它对所有的数字进行加法。事实上,我真的很想让它成为一个建设者
模式,但仍在尝试了解咖喱函数是如何工作的。以下是我到目前为止的情况:
fun myAdditionFunction(x: Int) { { y: Int -> x + y }
这适用于两个参数。因此,myAdditionFunction(1)(2)将打印3
我希望它能为3个或多个参数工作:以下是我为3个参数所做的尝试:
fun myAdditionFunction(x: Int) {
var sum = 0
return { y: Int ->
sum = x + y
sum }
}
如何将总和向前推进,以及如何使其成为第三个内部函数??它不会编译
但是它不会编译我不确定您的两个示例中都发生了什么,也不确定它们是否在我的机器上编译(Kotlin 1.3.10) 但是,您可以使用lambda表达式,因为它们允许任意深度嵌套。对于2个变量,你可以
val myAdditionFunction = {x: Int -> {y: Int -> x + y}}
对于三个变量,您可以更深入地了解:
val myAdditionFunction = {x: Int -> {y: Int -> {z: Int -> x + y + z}}}
仅供参考,lambda表达式(也称为匿名函数)的形式如下:
val functionName = {argument1: type -> return_value}
我认为有些东西不能同时是Int和函数。也许在Int类上使用一个
operator fun Int.invoke(x: Int) = this + x
val a = 1(2)(3)
Lionel Briand提出了在
Int
上创建操作符扩展函数invoke
,您只需要另一个函数curry
作为入口点
operator fun Int.invoke(x: Int) = this + x
fun curry(x: Int) = x
你可以做你想做的事:
curry(1)(2)(3)(4) // will return 10
也许你想自己建立这个,很好,但如果没有,现有的库可以做咖喱,其中也会告诉你如何做。这是一个。funKTionale是另一个:。这篇博客上也有很多很好的例子。我只是试着自己做,这样我就可以成为客户建设者。很好的库我会查酷,我会查这两个库,然后用谷歌搜索这个主题,因为有很多这样的例子可以使用。还有一个好主意:)