调用更高阶函数 - Scala

时间:2016-10-25 20:58:36

标签: scala functional-programming

您好我是Scala的新手,并尝试从主类调用更高阶函数sum_of。我得到“无法解决带有此类签名错误的参考sumOf”。

object SumOf {

  def main(args: Array[String]) {
   val y =  sumOf(x=>x ,4,5)
    println(y)
  }

  def sumOf(f: Int => Int)(a: Int, b: Int): Int = {
    def loop(a: Int, acc: Int): Int =
      if (a > b) acc
      else loop(a + 1, f(a) + acc)
      loop(a, 0)
    }

}

2 个答案:

答案 0 :(得分:2)

sumOf是一个curried函数,所以它采用sumOf(x => x)(4,5)形式的两个参数,它与sumOf(x => x, 4,5)不同。这就是你收到错误的原因。

此外,您可以只使用一个参数sumOf(x => x) _来调用它,该参数返回另一个接受第二个参数的函数 (Int, Int) => Int = <function2>并返回一个函数。这通常称为部分功能应用。

答案 1 :(得分:1)

您的sumOf方法有两个参数列表,需要使用两个参数列表进行调用。

val y = sumOf(x => x)(4, 5)

您可以将sumOf视为一个函数,该函数接受Int => Int并返回一个新函数,该函数需要两个Int才能返回一个Int。