Назначение переменной с классом числового типа - PullRequest
4 голосов
/ 15 ноября 2011

Я пытаюсь написать универсальный итератор, который обрабатывает последовательность Фибоначчи:

def FibIter[T](fst:T , snd:T)(implicit num:Numeric[T]) = new Iterator[T] {
  var fn1 = fst
  var fn2 = snd
  def hasNext = true
  def next() = {
    val ret = fn1
    fn1 = fn2
    fn2 = num.plus(ret,fn2)
    ret
  }
}

Однако компилятор жалуется на первые два назначения переменных:

Тип параметра в структурном уточнении может не относиться к абстрактному типу, определенному вне этого уточнения

У кого-нибудь есть идеи, как решить эту проблему? Большое спасибо!

1 Ответ

5 голосов
/ 15 ноября 2011

Кажется, вы можете обойти это, используя выделенный класс

class FibIter[T](fst:T , snd:T)(implicit num:Numeric[T]) extends Iterator[T] {
  var fn1 = fst
  var fn2 = snd
  def hasNext = true
  def next() = {
    val ret = fn1
    fn1 = fn2
    fn2 = num.plus(ret,fn2)
    ret
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...