List Scala:使用左折叠时类型不匹配

List Scala:使用左折叠时类型不匹配,list,scala,List,Scala,玩弄列表函数的实现 sealed trait List[+A] case object Nil extends List[Nothing] case class Cons[+A] (head:A, tail:List[A]) extends List[A] object List { @tailrec def foldLeft[A,B] (list: List[A], z:B)(f:(A,B) => B) : B = { list match { case

玩弄列表函数的实现

sealed trait List[+A]

case object Nil extends List[Nothing]
case class Cons[+A] (head:A, tail:List[A]) extends List[A]

object List {
  @tailrec
  def foldLeft[A,B] (list: List[A], z:B)(f:(A,B) => B) : B = {
    list match {
      case Nil => z
      case Cons(h,t) => foldLeft(t,f(h,z))(f)
    }
  }

  def reverse[A] (list: List[A]) = {
    foldLeft(list,Nil)(Cons(_,_))
  }
}
获取类型不匹配,应为A,Nil.Type=>Nil.Type,实际:A,Nil.Type=>Cons[A],使用反向方法


我做错了什么?

使用Nil时,这是一个非常常见的错误。Nil扩展了List[Nothing],因此您需要稍微帮助编译器正确推断B的实际类型:


使用Nil时,这是一个非常常见的错误。Nil扩展了List[Nothing],因此您需要稍微帮助编译器正确推断B的实际类型:

def reverse[A] (list: List[A]) = {
    foldLeft(list,Nil:List[A])(Cons(_,_))
  }