2016-08-13 115 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