scala - 一等函数的部分应用函数

标签 scala

  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/

相关文章:

scala - java.lang.Integer 不能转换为 java.lang.Byte 错误与 Scala 中的任何类型

scala - 如何创建一个在标志降低之前暂停的 Akka Stream Flow?

Java 或 Scala 使用 java.time 快速解析具有多种不同格式的日期

scala - 是否可以指定一个类型在其构造函数中具有某些参数?斯卡拉

json - 创建一个通用的 Json 序列化函数

java - 给定一个 scala 不可变映射,如何在 Java 中插入/删除条目

java - ConfigFactory ParseFile 通过 Java 系统属性的变量替换进行解析

java - 如何在 IntelliJ Idea 中禁用 Gradle 守护程序?

scala - 如何在scaladoc中生成到标准库类型的链接?

scala - 定义 Int 的隐式转换