List.empty与List()与新List()

时间:2012-03-13 14:37:54

标签: list scala collections immutability

List.emptyList()new List()之间的区别是什么?我什么时候应该使用哪个?

3 个答案:

答案 0 :(得分:33)

首先,new List()不起作用,因为List类是抽象的。其他两个选项在the List object中定义如下:

override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList

即,它们基本上是等价的,所以它主要是风格问题。我更喜欢使用empty,因为我发现它更清晰,并且它减少了括号。

答案 1 :(得分:12)

从我们的List源代码:

object List extends SeqFactory[List] {
  ...
  override def empty[A]: List[A] = Nil
  override def apply[A](xs: A*): List[A] = xs.toList
  ... 
}

case object Nil extends List[Nothing] {...}

所以我们可以看到它完全一样

为完整起见,您还可以使用Nil

答案 2 :(得分:4)

对于空列表的创建,正如其他人所说,你可以使用最适合你的那个。

但是对于空列表的模式匹配,您只能使用Nil

scala> List()
res1: List[Nothing] = List()

scala> res1 match {
     | case Nil => "empty"
     | case head::_ => "head is " + head
     | }
res2: java.lang.String = empty

编辑:更正:case List()也有效,但case List.empty无法编译