我想根据本教程使用add
方法创建一个单链接列表
Learning Scala by building Scala - Lists
您能解决错误吗?
Error:(6, 13) covariant type T occurs in contravariant position in type T of value element def add(element: T): MyLinkedList[T]
当我将+
添加到泛型[T]
时出现错误,因为没有+
的方法应用不起作用。
sealed trait MyLinkedList[+T] {
def add(element: T): MyLinkedList[T]
}
object MyLinkedList {
def apply[T](elements: T*): MyLinkedList[T] = {
if (elements.isEmpty) {
new Empty[Nothing]
} else {
Cons(elements.head, apply(elements.tail: _*))
}
}
final case class Cons[T](element: T, rest: MyLinkedList[T]) extends MyLinkedList[T] {
override def add(element: T): MyLinkedList[T] = ???
}
final case class Empty[T]() extends MyLinkedList[T] {
override def add(element: T): MyLinkedList[T] = ???
}
}
答案 0 :(得分:2)
如果更改add
的签名,则错误消失:
sealed trait MyLinkedList[+T] {
def add[U >: T](element: U): MyLinkedList[T]
}
如果您想保持MyLinkedList
不变(没有+
),则可以返回Empty[T]
而不是Empty[Nothing]
中的apply
。