2

在学习了不同的编程语言(主要是解释性的)之后,我正在学习 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  

我看不出那里有什么问题?

4

3 回答 3

5

如果你用多个括号(多个参数列表)声明你的函数,你还必须这样调用它(咖喱形式):

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

请参阅Scala中的多个参数列表和每个列表的多个参数之间有什么区别?了解更多信息。

于 2012-09-28T15:25:08.327 回答
4

该函数必须以显式柯里化形式调用(必须有更好的名称),因为它是这样定义的:

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)
于 2012-09-28T15:24:33.663 回答
3

您已经定义sum两个参数列表,但试图只用一个来调用它。

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

于 2012-09-28T15:24:27.927 回答