如何执行接受并返回另一个的用户定义函数?

时间:2014-12-19 18:04:10

标签: scala

这是我的功能:

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: (?, ?) => ?

2 个答案:

答案 0 :(得分:6)

首先,partial1不是部分功能。它是一个返回另一个函数的函数,因此它是一个高阶函数。

您收到的编译错误是因为partial1需要一个函数(A, B) => C,但是您传递fun(1,3),其评估为IntInt(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
  }}