Curry 函数 - 如何调用 3 个(或多个)函数?
Curry functions - How to call 3 (or multiple) functions?
我正在尝试在 kotlin 中柯里化一个函数,以便我可以这样调用它
myAdditionFunction(1)(2)(3)
这个调用会 return 6 因为 1+ 2 + 3 = 6
我只需要它对所有数字进行加法运算。实际上我真的很想让它做一个生成器
未来的模式,但仍在尝试了解 curry 函数的工作原理。这是我目前所拥有的:
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 class?
上使用 extention function
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
我正在尝试在 kotlin 中柯里化一个函数,以便我可以这样调用它
myAdditionFunction(1)(2)(3)
这个调用会 return 6 因为 1+ 2 + 3 = 6
我只需要它对所有数字进行加法运算。实际上我真的很想让它做一个生成器 未来的模式,但仍在尝试了解 curry 函数的工作原理。这是我目前所拥有的:
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 class?
上使用 extention functionoperator 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