Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin Curry函数-如何调用3个(或多个)函数?_Kotlin_Currying - Fatal编程技术网

Kotlin Curry函数-如何调用3个(或多个)函数?

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 我

我试图在kotlin中使用一个函数,这样我就可以这样调用它

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是另一个:。这篇博客上也有很多很好的例子。我只是试着自己做,这样我就可以成为客户建设者。很好的库我会查酷,我会查这两个库,然后用谷歌搜索这个主题,因为有很多这样的例子可以使用。还有一个好主意:)