嗨,我是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)
}
}
sumOf
是一个柯里函数,所以它有两个参数,sumOf(x => x)(4,5)
的形式不同于sumOf(x => x, 4,5)
。这就是你得到错误的原因。
此外,您可以只使用一个参数sumOf(x => x) _
调用它,该参数返回另一个接受第二个参数的函数(Int, Int) => Int = <function2>
并返回一个函数。这通常被称为部分函数应用。
您的sumOf
方法有两个参数列表,并且需要使用两个参数列表调用
val y = sumOf(x => x)(4, 5)
可以把sumOf
看作一个函数,它接受一个Int => Int
,然后返回一个新函数,这个新函数接受两个Int,返回一个Int。