Scala,Currying 多参数组方法?

标签 scala currying

我想知道是否可以在多参数组函数上使用柯里化(Currying):

scala> def sum(a: Int)(b: Int): Int = { a+b }
sum: (a: Int)(b: Int)Int

scala> sum(3)(4)
res2: Int = 7

scala> val partFunc = sum(3) _
partFunc: Int => Int = <function1>

scala> partFunc(4)
res3: Int = 7

scala> val partFunc2 = sum _ _
<console>:1: error: ';' expected but '_' found.
       val partFunc2 = sum _ _
                             ^

scala> val partFunc2 = (sum _) _
<console>:8: error: _ must follow method; cannot follow Int => (Int => Int)
       val partFunc2 = (sum _) _

最佳答案

简单写sum _sum 的论点没有任何关系, 而是简单区分函数对象sum从函数的应用。

因此,您可以编写:

scala> val partFunc2 = sum _
partFunc2: Int => (Int => Int) = <function1>

从类型信息可以看出,这已经是sum的curried版本了这需要两个 Int参数。

当然,您可以像以前一样继续使用 partFunc2(4)属于 Int => Int 类型等等。

关于Scala,Currying 多参数组方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880982/

相关文章:

scala - 为什么 SBT 0.12.2 使用 Scala 2.9.2 解析插件并忽略 build.sbt 中的 scalaVersion?

typescript - 柯里化(Currying)函数的返回类型

javascript - 广义 Curry - Javascript

javascript - 我可以更好地 curry 吗?

scala - 使用无符号和有符号整数设计编号系统

scala - scala set.contains 的实现

scala - 有效地序列化案例类

javascript - Currying-in 功能和 ES6 解构

javascript - 将动态参数添加到函数,该函数的参数作为参数传递给当前函数

scala - Sbt 依赖运行测试