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

res2: Boolean = true 

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

res3: Boolean = true 

Ma quando si cerca di fare lo stesso con Array, non funziona lo stesso. Perché?Strano comportamento del tipo di matrice

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

res4: Boolean = false 

Ho utilizzato 2.8.0.RC7 e 2.8.0.Beta1-prerelease.

+1

Nota: è possibile cercare tutte le domande dell'array relative allo scala con [scala] [array] – oluies

+0

possibile duplicato di [Perché fa \ 'Array (0,1,2) == Array (0,1,2) \' non restituisce il risultato previsto?] (http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result) – Suma

risposta

17

Perché la definizione di "uguale" per gli array è che si riferiscono allo stesso array.

Questo è coerente con l'uguaglianza array di Java, utilizzando Object.Equals, quindi confronta i riferimenti.

Se si desidera controllare gli elementi a due a due, quindi utilizzare sameElements

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

o deepEquals, che è stato deprecato a 2,8, così invece utilizzare:

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

C'è una buona discussione Nabble su array equality .

+2

Is Array the unica eccezione alla regola generale di confrontare gli elementi reali per le collezioni incorporate? Tutte le altre raccolte che ho provato confrontano gli elementi. –

+2

@olle: per quanto ne so, è l'unica collezione che presenta questo comportamento. Anche 'ArrayList' confronta elementi. Quello che non riesco a capire, è come dovrebbe essere appreso dalla documentazione :) – Stephen

+3

vedi anche http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1- 2-not-return-the-expected-result – oluies