неявное определение параметров в классе - PullRequest
2 голосов
/ 20 марта 2010
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 голосов
/ 20 марта 2010

Использование вложенного метода

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, поэтому я бы порекомендовал первый.

0 голосов
/ 20 марта 2010

В Scala 2.8 доступны параметры метода (и конструктора) по умолчанию:

def m1(i: Int = 23): Int = i * 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...