the - List.empty vs. List() vs. new List()
wordpress wp_query get categories (3)
Del código fuente de la List tenemos:
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] {...}
Así que podemos ver que es exactamente lo mismo.
Para completar, también puedes usar Nil
.
¿Cuál es la diferencia entre List.empty
, List()
y new List()
? ¿Cuándo debo usar cuál?
En primer lugar, la new List()
no funcionará, ya que la clase List
es abstracta. Las otras dos opciones se definen de la siguiente manera en el objeto List
:
override def empty[A]: List[A] = Nil
override def apply[A](xs: A*): List[A] = xs.toList
Es decir, son esencialmente equivalentes, por lo que es principalmente una cuestión de estilo. Prefiero usar el empty
porque lo encuentro más claro y reduce los paréntesis.
Para las creaciones de una lista vacía, como han dicho otros, puedes usar la que te parezca mejor.
Sin embargo, para la comparación de patrones con una Lista vacía, solo puede usar Nil
scala> List()
res1: List[Nothing] = List()
scala> res1 match {
| case Nil => "empty"
| case head::_ => "head is " + head
| }
res2: java.lang.String = empty
EDITAR : Corrección: la case List()
también funciona, pero la lista de case List.empty
no compila