Sự khác nhau giữa List.empty
, List()
và new List()
là gì? Khi nào tôi nên sử dụng?List.empty vs. List() so với Danh sách mới()
24
A
Trả lời
30
Trước hết, new List()
sẽ không hoạt động, vì lớp List
là trừu tượng. Hai tùy chọn khác được quy định như sau trong the List
object:
override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList
Tức là, họ về cơ bản tương đương, do đó, nó chủ yếu là một vấn đề của phong cách. Tôi thích sử dụng empty
vì tôi tìm thấy nó rõ ràng hơn và nó cắt giảm trên dấu ngoặc đơn.
12
Từ mã nguồn của List ta có:
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] {...}
Vì vậy, chúng ta có thể thấy rằng nó là giống hệt nhau
Để hoàn chỉnh, bạn cũng có thể sử dụng Nil
.
4
Đối với những sáng tạo của danh sách trống, như những người khác đã nói, bạn có thể sử dụng danh sách trông đẹp nhất cho bạn.
Tuy nhiên đối với mô hình kết hợp với một danh sách rỗng, bạn có thể chỉ sử dụng Nil
scala> List()
res1: List[Nothing] = List()
scala> res1 match {
| case Nil => "empty"
| case head::_ => "head is " + head
| }
res2: java.lang.String = empty
EDIT: Correction: case List()
làm việc quá, nhưng case List.empty
không biên dịch
Các vấn đề liên quan
- 1. so sánh danh sách Scala với danh sách Java
- 2. Tại sao danh sách listener listener list?
- 3. OrderBy and List so với IOrderedEnumerable
- 4. Danh sách vs Danh sách iterator
- 5. Tạo một danh sách mới với phím
- 6. Danh sách Clojure so với vector so với số
- 7. Tuple là gì? Và tuple vs Danh sách so với Vector?
- 8. OSGi vs Spring vs Struts vs EJB so với Hibernate - một câu hỏi hoàn toàn mới của người mới
- 9. Hiệu suất tương đối của std :: vector so với std :: list so với std :: slist?
- 10. Java Danh sách vs ArrayList
- 11. ObservableCollection <> vs. List <>
- 12. Clojure: khuyết điểm (seq) so với conj (danh sách)
- 13. itertools.islice so với danh sách slice
- 14. ArrayList vs Danh sách <object>
- 15. if-else vs ifelse với các danh sách
- 16. Danh sách <? mở rộng Base> VS List <Base>
- 17. Prolog là vs = với danh sách
- 18. Haskell: Danh sách vs Luồng
- 19. Danh sách + = tuple vs Danh sách = Danh sách + tuple
- 20. Hash table vs Hash list vs Hash tree?
- 21. Danh sách <?> so với Danh sách <? extends Object>
- 22. Thêm vào danh sách so với Tăng
- 23. C#: params keyword so với danh sách
- 24. EF ICollection Vs Danh sách Vs IEnumerable Vs IQueryable
- 25. std :: list vs std :: vector iteration
- 26. Biểu thức phát điện so với Danh sách biên tập
- 27. Có một danh sách "Empty List" trong C# không?
- 28. danh sách Scala chứa vs mảng chứa
- 29. So sánh ổiChọn Danh sách Wtih?
- 30. Quicksort Python - List comprehension vs Recursion (thói quen phân vùng)
Bạn có thể thêm 'Nil' để danh sách đó. – Jesper