List.empty
,List()
和new List()
有什麼區別?我應該什麼時候使用哪個?List.empty vs. List()與新列表()
24
A
回答
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
不編譯
相關問題
- 1. List vs List <Object>?
- 2. 在F#中,爲什麼同時存在List.empty和List.Empty
- 3. Python List Comprehension vs
- 4. lisp:good vs list
- 5. IEnumerable vs List
- 6. DefaultModelBinder:IList vs List
- 7. C#Linq List比較和更新列表
- 8. Python LIST函數不返回新列表
- 9. 序言是vs =與列表
- 10. EF ICollection Vs List Vs IEnumerable Vs IQueryable
- 11. List到HashMap列表[List of List] - > List - Scala
- 12. Java 8 stream vs List
- 13. list vs observable comparison table
- 14. Clojure:cons(seq)vs. conj(list)
- 15. SQL Server性能新表vs新列
- 16. 鏈表VS的ArrayList List實現
- 17. Scala List鏈式運算符vs列表構造函數
- 18. 列表<?> vs List <?擴展對象>
- 19. 對於pip list vs pip列表,grep輸出不同-o
- 20. 重新排列LIST(升序)
- 21. ion-list vs ion-scroll vs virtualScroll in ionic 3
- 22. List的迭代列表
- 23. List <>的列表?
- 24. Linq list inside列表查詢
- 25. jquery list nav - 雙列表
- 26. List Comprehension返回空列表
- 27. IEnumerable vs List迭代集合
- 28. python list comprehension VS行爲
- 29. Realm List vs LinkingObjects性能
- 30. Ordered Linked List vs B-Tree
您可以添加'Nil'到該清單。 – Jesper 2012-03-13 14:55:19