2010-07-09 7 views
9
scala> List(1,2,3) == List(1,2,3) 

res2: Boolean = true 

scala> Map(1 -> "Olle") == Map(1 -> "Olle") 

res3: Boolean = true 

Pero al intentar hacer lo mismo con Array, no funciona igual. ¿Por qué?Comportamiento extraño del tipo de matriz

scala> Array('a','b') == Array('a','b') 

res4: Boolean = false 

He usado 2.8.0.RC7 y 2.8.0.Beta1-prerelease.

+1

Nota: Puede buscar todas las preguntas de matriz relacionadas con scala con [scala] [matriz] – oluies

+0

posible duplicado de [Por qué \ 'Array (0,1,2) == Array (0,1,2) \ ' no devolver el resultado esperado?] (http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result) – Suma

Respuesta

17

Debido a que la definición de "es igual a" a los arrays es que se refieren a la misma matriz.

Esto es consistente con la igualdad gama de Java, utilizando Object.Equals, por lo que se compara referencias.

Si desea comprobar los elementos pares, a continuación, utilizar sameElements

Array('a','b').sameElements(Array('a','b')) 

o deepEquals, que ha quedado en desuso en 2.8, así que en vez de usar:

Array('a','b').deep.equals(Array('a','b').deep) 

Hay una buena discusión Nabble en array equality .

+2

¿Es la matriz ¿única excepción a la regla general de comparar los elementos reales para las colecciones integradas? Todas las otras colecciones que he intentado comparar los elementos. –

+2

@olle: hasta donde sé, es la única colección que muestra este comportamiento. Incluso 'ArrayList' compara elementos. Lo que no puedo entender, es cómo se supone que debemos aprender de la documentación :) – Stephen

+3

también ver http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1- 2-no-return-the-expected-result – oluies