В чем разница между List.empty
, List()
и new List()
? Когда я должен использовать это?List.empty vs. List() vs. new 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
Для создания пустого списка, как говорили другие, вы можете использовать тот, который выглядит лучше всего для вас.
Однако для сопоставления образца с пустым списком, вы можете использовать только Nil
scala> List()
res1: List[Nothing] = List()
scala> res1 match {
| case Nil => "empty"
| case head::_ => "head is " + head
| }
res2: java.lang.String = empty
EDIT: Коррекция: case List()
тоже работает, но case List.empty
не компилирует
Смежные вопросы
- 1. List clear vs. new Список
- 2. Arraylist vs List vs Dictionary
- 3. IEnumerable vs List
- 4. RavenDB IEnumerable vs List
- 5. python list compusion vs + =
- 6. Scala List method `::` vs `+:`
- 7. DefaultModelBinder: IList vs List
- 8. Erlang array vs list
- 9. Objectify Set vs List
- 10. Iterating vs List Concatenation
- 11. Scala List vs ListBuffer
- 12. return vs print list
- 13. генератор vs list comprehension
- 14. (list ...) vs '(...) в Lisp
- 15. Python list() vs list comprehension building speed
- 16. C# List Sort vs Inserting
- 17. Python list comprehension vs generator
- 18. ArrayList vs Array и List
- 19. Array with Resize() vs List
- 20. INSERT IGNORE vs IN list()
- 21. Vector vs List in VB.NET
- 22. Java List.clear() vs. List = null
- 23. Python numpy array vs list
- 24. C# dictionary vs list use
- 25. Python List Comprehension vs for
- 26. JHipster сгенерированный код - LinkedList vs List
- 27. Массив объектов vs list + массив индексов
- 28. ConcurrentBag vs Custom Thread Safe List
- 29. Итерация с помощью IEnumerable vs List
- 30. ObservableCollection <> vs. List <>
Вы можете добавить 'Nil' в этот список. – Jesper