修改列表类

时间:2016-10-28 15:53:57

标签: scala functional-programming

我正在使用Scala中的函数编程,前几章定义了这种类型的数据结构:

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

当我尝试定义这样的链接列表时;它按预期工作:

val nums: List[Int] = Cons(1, Cons(2, Cons(3, Nil)));

我正在尝试定义这样的链接列表,但是我得到了编译错误(类型为scala.collection.immutable.List [Int]的表达式不符合预期类型List [Int]:< / p>

val nums: List[Int] = List[Int](1, 2, 3)

我的问题是 - 1)声明数据结构是否会修改List的内部类? 2)为什么不能使用第二种结构?

1 个答案:

答案 0 :(得分:6)

  

1)声明数据结构是否会修改List的内部类?

没有

  

2)为什么不能使用第二种结构?

您正在调用apply对象的List方法。范围内唯一名为List的对象是datascala.collection.immutable.List object返回its apply method的实例。但是,您已将nums声明为List[Int]类型,而不是scala.collection.immutable.List[Int],因此这两种类型不兼容。

您需要编写自己的List对象,例如:

object List {
  def apply[A](elements: A*): List[A] = 
    if (elements.isEmpty) Nil else Cons(elements.head, apply(elements.tail :_*))
}