类中的隐式参数定义

时间:2010-03-20 00:23:29

标签: scala

implicit val odkaz = head;
def vypis(implicit odkaz:Prvek):String = {
    odkaz match{
        case null => ""
        case e => e.cislo + " " + e.pocet + "\n" + vypis(e.dalsi)
    }
}

...

def main(args:Array[String]){
    val q = new MyQueue() // insert some values
    println(q.vypis)
}

此方法(vypis)是队列类的成员,因此我总是希望从外部调用方法时从队列的开头开始递归。有没有办法如何编写它,来自外部调用的方法,没有参数,但在内部,有一个参数 - 用于递归...? 编译器抱怨从外部调用时未定义参数


或者有没有办法如何指定方法参数的默认值?

2 个答案:

答案 0 :(得分:0)

在Scala 2.8中,可以使用默认方法(和构造函数)参数:

def m1(i: Int = 23): Int = i * 2

答案 1 :(得分:0)

使用嵌套方法

def sum(list: List[Int]) = {
  @annotation.tailrec
  def sum(ls: List[Int], s: Int): Int = ls match { 
     case x :: xs => sum(xs, x + s)
     case _ => s
  }
  sum(list, 0)
}

使用累加器的默认参数

@annotation.tailrec
def sum(list: List[Int], s: Int = 0): Int = list match { 
   case x :: xs => sum(xs, x + s)
   case _ => s
}

第二种方法(仅适用于Scala 2.8)不必要地扩展了公共API,因此我建议使用第一种方法。