我正在使用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)为什么不能使用第二种结构?
答案 0 :(得分:6)
1)声明数据结构是否会修改List的内部类?
没有
2)为什么不能使用第二种结构?
您正在调用apply
对象的List
方法。范围内唯一名为List
的对象是data,scala.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 :_*))
}