在地图中使用带有默认参数的方法

Use method with default parameter in map

我想将 Doubles 的流映射到采用两个参数的方法,其中一个参数具有默认值。我想使用默认参数,所以我的方法只有 1 个我需要传递的参数:

  def pow(x:Double, exponent:Double=2.0) = {
    math.pow(x,exponent)
  }

我发现以下方法有效,但我不明白为什么:

  val res = (1 to 100).map(_.toDouble).map(pow(_))

我特别困惑,因为以下内容不起作用(由于缺少类型信息而导致编译器错误):

  val pow2 = pow(_)
  val res = pow2(2.0)
  println(res) // expect 4.0

编译器无法推断您将提供给 pow2 的类型。在 res 映射中,您明确地为它提供了一个 Doubles 的集合,因此 pow(_) 不会抱怨。但是,在 val pow2 = pow(_) 的情况下,它抱怨缺少类型参数。改成

val pow2 = pow(_: Double)
val res = pow2(2.0)
println(res)

它会工作得很好。 pow(_) 将扩展两个 x => pow(x),此时编译器无法推断出没有类型注释的 x 是什么。