使用(...)(...)函数时参数太多

时间:2012-09-28 15:22:26

标签: scala

我从不同的编程语言(主要是解释)来学习Scala。我正在做以下练习,我收到一个错误。

def sum(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)
 }
 sum(x => x * x, 2, 4) //Too many arguments  

我看不出有什么问题?

3 个答案:

答案 0 :(得分:5)

如果您使用多个括号(多个参数列表)声明您的函数,您还必须像那样(curried form)调用它:

sum(x => x * x)(2, 4)

有关详细信息,请参阅What's the difference between multiple parameters lists and multiple parameters per list in Scala?

答案 1 :(得分:4)

必须以明确的curried形式调用该函数(必须有一个更好的名称),因为它是如何定义的:

sum(x => x * x)(2, 4)

//def sum (f: Int => Int) (a: Int, b: Int):
//    sum (x => x * x)    (2,      4)

但这也很简洁,因为一次只能评估咖喱形式的一部分:

val sumOfSquares = sum(x => x * x)
val s = someOfSquares(2,4)

答案 2 :(得分:3)

您已使用two parameter lists定义了sum,但正尝试仅使用一个来调用它。

调用它的语法正确方法是sum(x => x * x)(2, 4)