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

j2e*_*nue 0 currying kotlin

我试图在 kotlin 中咖喱一个函数,这样我就可以这样称呼它

myAdditionFunction(1)(2)(3)
Run Code Online (Sandbox Code Playgroud)

这个调用将返回 6 因为1+ 2 + 3 = 6

我只需要它对所有数字进行加法。实际上我真的希望它在未来做一个构建器模式,但仍然试图看看 curry 函数是如何工作的。这是我到目前为止所拥有的:

fun myAdditionFunction(x: Int) {     { y: Int -> x + y }
Run Code Online (Sandbox Code Playgroud)

这适用于两个参数。所以 myAdditionFunction(1)(2) 将打印 3。

我希望它适用于 3 个或多个:这是我为 3 个参数尝试过的:

fun myAdditionFunction(x: Int) {
        var sum = 0
        return { y: Int ->
             sum = x + y
            sum }
        }
Run Code Online (Sandbox Code Playgroud)

我如何将总和向前推进以及如何使其采用第三个内部功能?它不会编译。

但它不会编译

use*_*124 5

我不确定你的两个例子中发生了什么,也没有在我的机器上编译(Kotlin 1.3.10)。

但是,您可以使用 lambda 表达式,因为它们允许任意深度嵌套。所以对于 2 个变量,你可以有

val myAdditionFunction = {x: Int -> {y: Int -> x + y}}
Run Code Online (Sandbox Code Playgroud)

对于三个变量,您可以更深入:

val myAdditionFunction = {x: Int -> {y: Int -> {z: Int -> x + y + z}}}
Run Code Online (Sandbox Code Playgroud)

仅供参考,一个 lambda 表达式(又名匿名函数)的形式如下:

val functionName = {argument1: type -> return_value}
Run Code Online (Sandbox Code Playgroud)