如何在 Scala 中声明隐式方法中的默认参数 class
How to declare in scala a default param in a method of an implicit class
为了使用中缀表示法,我有以下scala代码示例。
implicit class myclass(n:Int ){
private def mapCombineReduce(map : Int => Double, combine: (Double,Double) => Double, zero: Double )(a:Int, b:Double): Double =
if( a > b) zero else combine ( map(a), mapCombineReduce(map,combine,zero)(a+1,b) )
var default_value_of_z : Int = 0
def sum( z : Int = default_value_of_z) = mapReduce( x=>x , (x,y) => x+y+z, 0)(1,n)
def ! = mapCombineReduce( x=> x, (x,y) => x*y, 1)(1,n)
}
4 !
4 sum 1 //sum the elements from 1 to 7 and each time combine the result, add 1 to the result.
4 sum
在 scala 2.12 中有什么方法可以 运行 4 sum
而无需在 myclass 中双重声明 sum 方法?
否,因为默认参数仅在参数列表为 provided
时使用
def f(x: Int = 1) = x
f // interpreted as trying to do eta-expansion
实际上启动 Scala 3 确实会 eta-expand
scala> def f(x: Int = 1) = x
def f(x: Int): Int
scala> f
val res1: Int => Int = Lambda73/1229666909@61a1990e
因此在您的情况下,您必须编写 4.sum()
并提供参数列表。
为了使用中缀表示法,我有以下scala代码示例。
implicit class myclass(n:Int ){
private def mapCombineReduce(map : Int => Double, combine: (Double,Double) => Double, zero: Double )(a:Int, b:Double): Double =
if( a > b) zero else combine ( map(a), mapCombineReduce(map,combine,zero)(a+1,b) )
var default_value_of_z : Int = 0
def sum( z : Int = default_value_of_z) = mapReduce( x=>x , (x,y) => x+y+z, 0)(1,n)
def ! = mapCombineReduce( x=> x, (x,y) => x*y, 1)(1,n)
}
4 !
4 sum 1 //sum the elements from 1 to 7 and each time combine the result, add 1 to the result.
4 sum
在 scala 2.12 中有什么方法可以 运行 4 sum
而无需在 myclass 中双重声明 sum 方法?
否,因为默认参数仅在参数列表为 provided
时使用def f(x: Int = 1) = x
f // interpreted as trying to do eta-expansion
实际上启动 Scala 3 确实会 eta-expand
scala> def f(x: Int = 1) = x
def f(x: Int): Int
scala> f
val res1: Int => Int = Lambda73/1229666909@61a1990e
因此在您的情况下,您必须编写 4.sum()
并提供参数列表。