Scala:实现通用折叠

  • 本文关键字:折叠 实现 Scala scala
  • 更新时间 :
  • 英文 :


我不明白为什么折叠不编译。谁能给我一个线索?

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) => ...
            ^^

有关于类型擦除的警告,但确实编译并且似乎运行。

最新更新