如何在 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() 并提供参数列表。