gpt4 book ai didi

scala - 链表中的协变类型 T

转载 作者:行者123 更新时间:2023-12-02 00:54:47 24 4
gpt4 key购买 nike

我想根据教程用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] 时出现错误,因为没有 + 方法 apply 无法工作。

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] = ???
}
}

最佳答案

如果更改 add 的签名,错误就会消失:

sealed trait MyLinkedList[+T] {
def add[U >: T](element: U): MyLinkedList[T]
}

如果你想保持 MyLinkedList 不变(没有 +)你可以返回 Empty[T] 而不是 Empty[Nothing ]apply 中。

关于scala - 链表中的协变类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com