这是我的功能:
def partial1[A, B, C](a: A, f: (A, B) => C): B => C = (b: B) => f(a, b)
> partial1: [A, B, C](a: A, f: (A, B) => C)B => C
这里我调用函数partial1
:
def fun(a: Int, b: Int) = a + b
> fun: (a: Int, b: Int)Int
val r = partial1(1, fun)
> r : Int => Int = <function1>
r(fun(1,3))
> res0: Int = 5
因此r
是一个函数,它将函数作为参数并返回Function1
(带有1个参数的函数)。 Int => Int
不应该是Int, Int
,因为两个Int
是函数参数吗?
为什么我不能像Partial1
那样实现导致编译错误的partial1(1,(fun(1,3)))
:type mismatch; found : Int required: (?, ?) => ?
?
答案 0 :(得分:6)
首先,partial1
不是部分功能。它是一个返回另一个函数的函数,因此它是一个高阶函数。
您收到的编译错误是因为partial1
需要一个函数(A, B) => C
,但是您传递fun(1,3)
,其评估为Int
。 Int
与(Int, Int) => Int
不同。
答案 1 :(得分:0)
class ex03 {
def partial1[A,B,C](a:A, f:(A,B) => C): B => C = f(a,_)
}
class ex03Test extends UnitSpec {
behavior of "partial1"
it should "return 6" in {
val e = new ex03
val multiplyByTwo = e.partial1(2, (a:Int, b:Int) => a * b)
multiplyByTwo(3) mustBe 6
}}