2012-03-13 67 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不編譯