我不明白为什么折叠不编译。谁能给我一个线索?
sealed trait ListG[A] {
def fold[A,B](end: B, f: (A,B) => B): B = this match {
case End() => end
case Cons(hd,tl) => f(hd, tl.fold(end,f))
}
}
错误:(20,28(类型不匹配; 找到:HD.Type(带有基础A型( 必需: case Cons(HD,TL(=> f(HD,TL.Fold(End,F(( ^ 最终案例类Enda扩展了Listg [a] 最终案例类Cons [A](HD:A,TL:ListG [A](扩展Listg [a]
当您在fold
函数上定义附加类型参数A
时,您正在遮蔽ListG
的类型参数A
。
添加类型的cascription似乎可以解决问题。
case Cons(hd:A, tl) => ...
^^
有关于类型擦除的警告,但确实编译并且似乎运行。