【发布时间】:2016-03-20 11:58:30
【问题描述】:
Functional Programming in Scala 的作者give this 作为 scala 中curry 的定义:
def curry[A,B,C](f: (A, B) => C): A => (B => C) =
a => b => f(a, b)
但是,如果我们将其应用于采用参数类型的函数,例如:
def isSorted[A](as: Array[A], ordered:(A,A)=>Boolean) =
if(as.size < 2)
true else
as.zip(as.drop(1)).map(ordered.tupled).reduce(_ && _)
那么结果想要A(在isSorted)什么都不是:
scala> curry(isSorted)
res29: Array[Nothing] => (((Nothing, Nothing) => Boolean) => Boolean) = <function1>
这显然不是我们想要的。 curry 应该被不同地定义,或者被不同地调用,还是在 Scala 中实现 curry 是不切实际的?
【问题讨论】:
-
所以你想测试你的 isSorted 方法?
-
不,我想对带有类型参数的函数使用 curry。
标签: scala functional-programming currying