2012-06-20 11 views
13
list1 == list2 

Para hacer la comprobación anterior, ¿Scala repetirá en ambas listas y llamará a igual en cada par de elementos?¿Cómo funciona el método de igualdad de Scala en el caso de una lista?

(estoy seguro, esta pregunta se ha hecho antes, pero no pude encontrar una buena respuesta con Google & Co)

+0

¿Has mirado el código? Scala es de código abierto. –

+0

¿Ha intentado ejecutarlo? –

+2

@Tyler: Sí, pero no pude encontrar el código de código correcto, ya que List amplía muchas otras clases. –

Respuesta

24

Usted puede encontrar esto sí mismo por cualquier método mirando el Scaladoc y descubrir donde está definido, y luego mirando la fuente. Si comienza con online docs, puede hacer todo esto simplemente haciendo clic: vaya al método, ábralo haciendo clic en la flecha de la izquierda, y verá una lista de clases superiores. Ve al primero y mira la fuente.

De todos modos, en este caso, GenSeqLike, un supertrait de List y muchas otras colecciones, define equals como un cheque canEqual seguido de sameElements. A su vez, sameElements comprueba si ambos argumentos son LinearSeq s, y si es así, las llamadas son iguales en cada par de elementos al dividir la cabeza y la cola una por una. De lo contrario, utiliza de manera predeterminada iteradores, llamando al hasNext en cada uno y luego comparando los elementos con equals.

Por lo tanto, larga historia corta: sí, llama igual en cada par de elementos (se detiene en cuanto encuentra una discrepancia).

+3

Perfecto, muchas gracias. Eso ayudó mucho (también para futuras investigaciones). –

Cuestiones relacionadas