sea*_*ick 0 functional-programming scala
我正在使用Scala中的函数编程,前几章定义了这种类型的数据结构:
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
Run Code Online (Sandbox Code Playgroud)
当我尝试定义这样的链表时; 它按预期工作:
val nums: List[Int] = Cons(1, Cons(2, Cons(3, Nil)));
Run Code Online (Sandbox Code Playgroud)
我正在尝试定义这样的链接列表,但是我得到了编译错误(类型为scala.collection.immutable.List [Int]的表达式不符合预期类型List [Int]:
val nums: List[Int] = List[Int](1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 1)声明数据结构是否修改了List的内部类?2)为什么不能使用第二种结构?
1)声明数据结构是否修改了List的内部类?
没有.
2)为什么不能使用第二种结构?
您正在调用apply该List对象的方法.命名的唯一对象List是在范围为scala.collection.immutable.List对象和它的apply方法返回的一个实例scala.collection.immutable.List.但是,您已声明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 :_*))
}
Run Code Online (Sandbox Code Playgroud)