2016-08-13 2 views
1

Я пытался написать простой метод toList ...простого типа ошибка рассогласования

trait Stream[+A] { 

    def uncons: Option[(A, Stream[A])] 

    def isEmpty: Boolean = uncons.isEmpty 

    def toList[A]: List[A] = this.uncons match { 
    case Some((h,t)) => h::t.toList 
    case None => List() 
    } 

} 

однако, это приводит к следующей ошибке:

type mismatch; found : x$1.type (with underlying type A) required: A 

Я не понимаю, почему этот код не работает. . Возможно, я что-то очень очевидное :(

ответ

5

проблема в вашем определении toList метода отсутствует Поступая:.

def toList[A]: List[A] = this.uncons match { ... } 

Вы на самом деле определение нового типа A, в котором ваш метод параметризованных Просто объявить метод как:

def toList: List[A] = this.uncons match { ... } 

и вы хорошо идти (это определение будет использовать тот же A, определенные в классе)

+0

А ... Спасибо, глупая ошибка :) – Maciej

Смежные вопросы