【发布时间】:2019-12-27 19:34:45
【问题描述】:
我正在尝试在 Scala 工作表中执行这段代码(使用 Intellij):
我使用的 Scala 版本是 2.11.12
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
def tail[A](l: List[A]): List[A] =
l match {
case Nil => sys.error("tail of empty list")
case Cons(_, t) => t
}
val a = List(1,2,3)
tail(a) //should be List(2,3)
编译器给了我一个'类型不匹配,预期:List[NotInferedA],实际:List[Int]。
有人可以帮助我吗? 谢谢
【问题讨论】:
-
问题是您将自己的 List 与 Scala 的 List 结合起来,特别是这个
val a = List(1,2,3)是 Scala 的 List。我的建议是使用不同的名称,例如MyList、MyNil等。此外,您不能将 Lists 的实例创建为MyList(1, 2, 3),因为未定义该方法。您可以创建它,或者只是将您的列表构造为MyCons(1, MyCons(2, MyCons(3, MyNil))),或者,您可以创建一个类似于::的运算符,使其更美观,如1 :: 2 :: 3 :: MyNil。
标签: scala type-mismatch