val divide = (num: Double, den: Double) => {
num / den
}
//type of pafv1 is () => (Double,Double) => Double
val pafv1 = divide _
//type of pafv2 is Double => Double
val pafv2 = divide(_:Double,2)
为什么pafv1
的类型不是(Double,Double) => Double
?
当divide
为简单方法时,pafv1
的类型为(Double,Double) => Double
。
最佳答案
我认为解释来自eta expansion .
Scala 提供 val
的 getter 和 setter,这意味着 divide
实际上是一个方法 def div = (num: Double, den: Double) = > { num/den }
当您执行val pafv1 =divide_
时,这会将其扩展为divide的eta扩展版本,即() => (num: Double, den: Double) => { num/den}
为什么要进行 eta 扩展?因为您正在尝试使用方法作为值(您正在部分评估 _,强制结果为函数值)。
关于scala - 一等函数的部分应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50987363/