【发布时间】:2011-11-09 10:05:25
【问题描述】:
我试图了解 Scala 中的部分应用程序的柯里化优势。请考虑以下代码:
def sum(f: Int => Int) = (a: Int, b: Int) => f(a) + f(b)
def sum2(f: Int => Int, a: Int, b: Int): Int = f(a) + f(b)
def sum3(f: Int => Int)(a: Int, b: Int): Int = f(a) + f(b)
val ho = sum({identity})
val partial = sum2({ identity }, _, _)
val currying = sum3({ identity })
val a = currying(2, 2)
val b = partial(2, 2)
val c = ho(2, 2)
那么,如果我可以那么简单地计算部分应用函数,那么柯里化有什么好处呢?
【问题讨论】:
-
您的示例中没有使用偏函数。您声明的第二个
val使用柯里化。另一方面,sum不使用柯里化 - 它只是将其他函数作为参数并返回函数的高阶函数。 -
partial是部分应用函数,而不是部分函数。两者是不同的概念。 -
更新了问题以更好地反映这些 cmets。