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

res2: Boolean = true 

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

res3: Boolean = true 

Aber wenn Sie versuchen, das Gleiche mit Array zu tun, funktioniert es nicht das gleiche. Warum?Merkwürdiges Verhalten des Array-Typs

Ich habe 2.8.0.RC7 und 2.8.0.Beta1-prerelease verwendet.

+1

Hinweis: Sie können nach allen scala-bezogenen Array-Fragen mit [scala] [array] – oluies

+0

mögliches Duplikat von [Warum Array (0,1,2) == Array (0,1,2) \ 'suchen nicht das erwartete Ergebnis zurückgeben?] (http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result) – Suma

Antwort

17

Da die Definition von "equals" für Arrays bedeutet, dass sie sich auf dasselbe Array beziehen.

Dies ist konsistent mit Java-Array-Gleichheit, mit Object.Equals, so vergleicht es Referenzen.

Wenn Sie paarweise Elemente überprüfen möchten, verwenden Sie dann sameElements

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

oder deepEquals, die in 2.8 veraltet ist, so statt:

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

Es gibt eine gute Nabble Diskussion über array equality .

+2

Is Array der einzige Ausnahme von der allgemeinen Regel, die tatsächlichen Elemente für die eingebauten Sammlungen zu vergleichen? Alle anderen Sammlungen, die ich ausprobiert habe, vergleichen die Elemente. –

+2

@olle - Soweit ich weiß, ist es die einzige Sammlung, die dieses Verhalten zeigt. Sogar 'ArrayList' vergleicht Elemente. Was ich nicht herausfinden kann, ist, wie das aus der Dokumentation gelernt werden soll :) – Stephen

+3

siehe auch http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1- 2-nicht-Rückkehr-das-erwartete-Ergebnis – oluies

Verwandte Themen