我正在学习Scala,但我不太了解:
为什么sum2不能重写代码sum1?
为什么在sum1中,a和b自动知道(Int,Int)对应于a和b?
谢谢。
def sum1 (f: Int => Int) : (Int, Int) => Int = {
def sumF(a:Int, b:Int) : Int = {
if (a > b) 0
else f(a) + sumF(a + 1, b)
}
sumF
}
def sum2 (f: Int => Int, Int, Int) : Int = {
def sumF(a:Int, b:Int) : Int = {
if (a > b) 0
else f(a) + sumF(a + 1, b)
}
sumF
}
答案 0 :(得分:3)
这是因为sum1
和sum2
具有不同的接口:sum1
是(Int => Int) => ((Int, Int) => Int)
,而sum2
是(Int => Int, Int, Int) => Int
。即sum1
返回接受两个整数并返回一个整数的函数。但是sum2
仅返回一个整数值,而不是一个函数。
您的sumF
函数等于lambda函数
val sumF: (Int, Int) => Int = (a: Int, b: Int) => {
if (a > b)
0
else
f(a) + sumF(a + 1, b)
}
如果您尝试将sumF
保存为值(看起来像val tmp: (Int, Int) => Int = sumF
),就可以看到它