我想将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
答案 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
。