在map中使用带默认参数的方法

时间:2016-08-25 08:39:15

标签: scala currying

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

  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

1 个答案:

答案 0 :(得分:3)

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

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

它会正常工作。 pow(_)将扩展两个x => pow(x),此时编译器无法在没有类型注释的情况下推断出x