Ошибка компиляции Scala - PullRequest
       6

Ошибка компиляции Scala

19 голосов
/ 28 февраля 2012

Не удается выяснить, что не так с StrangeIntQueue, расширяющим Очередь, почему возникает ошибка «Недостаточно аргументов для конструктора Очередь: (ведущий: Int) list.Lister.Queue [Int]. Неуказанное ведение параметра значения». Как я могу это указать?

  class Queue[+T](
    private val leading: T
  ) {
    def enqueue[U >: T](x: U) =
      new Queue[U](leading: U) // ...
  }

  class StrangeIntQueue(private val leading: Int) extends Queue[Int] {
    override def enqueue(x: Int) = {
      println(math.sqrt(x))
      super.enqueue(x)
    }
  }

Ответы [ 2 ]

24 голосов
/ 28 февраля 2012
extends Queue[Int](leading)

Вы должны передать аргументы, даже если кажется «очевидным», что делать.

Обратите также внимание, что поскольку вы объявили leading private, вы фактически получите две копии:один для StrangeIntQueue и один для Queue.(В противном случае вы могли бы иметь только StrangeIntQueue(leading0: Int) extends Queue[Int](leading0) и использовать унаследованную копию leading внутри.)

7 голосов
/ 28 февраля 2012

Первичный конструктор класса Queue, который расширяется StrangeIntQueue, принимает параметр, но вы не передаете ему ничего для параметра. Попробуйте это:

class StrangeIntQueue(leading: Int) extends Queue[Int](leading) {
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...