我对函数在Scala中的部分应用不是很清楚……我举个例子:
def myOperation(x: Int)(y: Int): Int = {
val complexVal = complexCalc(x)
println("complexVal calculated")
complexVal + y
}
def complexCalc(x: Int): Int = x * 2
val partial = myOperation(5)_
println("calculate")
println("result(3): " + partial(3))
println("result(1): " + partial(1))
其输出将是:
calculate
complexVal calculated
result(3): 13
complexVal calculated
result(1): 11
所以complexVal
计算了2次,如果我只想计算一次怎么办?
对于具有 javascript 知识的人,例如:
function myOperation(x) {
var complexVal = complexCalc(x)
return function(y){
complexVal + y
}
}
编辑:
那么我之前写的和这个有什么区别:
def myOperation2(x: Int, y: Int): Int = {
val complexVal = complexCalculation(x)
println("complexVal calculated")
complexVal + y
}
val partial = myOperation(5)_
val partial2 = myOperation2(5, _: Int)