我试图在 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)
我如何将总和向前推进以及如何使其采用第三个内部功能?它不会编译。
但它不会编译
我不确定你的两个例子中发生了什么,也没有在我的机器上编译(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)
归档时间: |
|
查看次数: |
666 次 |
最近记录: |