在地图中使用带有默认参数的方法
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
是什么。
我想将 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
是什么。