2012-03-13 34 views

回答

30

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

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

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

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

4

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

不过,对于模式对空列表匹配,你只能使用无

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不编译