我想在scala中实现一个列表。
因此,我想首先实现一个节点。
用其他语言我们可以说
typedef node<T> ([T] value, node[T] *next)
如何在scala中执行类似的操作?
答案 0 :(得分:1)
在Scala中,您将使用一个类来表示节点和终端节点:
sealed abstract class ListNode[+T]
final class ListTerminal extends ListNode[Nothing]
final case class MyList[T](head: T, tail: ListNode[T]) extends ListNode[T]
你可以这样使用它:
object Main {
def main(args: Array[String]): Unit = {
val l1 = ListTerminal
val l2: MyList[Int] = List(3, l1)
val l3: MyList[Any] = List("a", l2)
}
}
正如您所看到的,正确使用类型和方差让scala以安全的方式在类型层次结构中上下移动(事实上,l2
和l3
上的类型注释是可选的)。
与往常一样,您的自定义实现可以利用此功能或回退到默认(好)Scala列表!