我从不同的编程语言(主要是解释)来学习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
我看不出有什么问题?
答案 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)