In Programming in Scala schreiben die Autoren, dass Scala ==
Funktion Wertgleichheit anstelle von Referenzgleichheit vergleicht.Warum liefert die Funktion == von Array nicht wahr für Array (1,2) == Array (1,2)?
Dies funktioniert auf Listen wie erwartet:
scala> List(1,2) == List(1,2)
res0: Boolean = true
Es ist jedoch auf Arrays nicht funktioniert:
scala> Array(1,2) == Array(1,2)
res1: Boolean = false
Die Autoren empfehlen, stattdessen die sameElements Funktion zu verwenden:
scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true
Als Erklärung schreiben sie:
Obwohl dies wie eine Inkonsistenz erscheinen mag, ist es ein konservativer Ansatz seitens der Sprachentwickler, einen expliziten Test der Gleichheit zweier veränderbarer Datenstrukturen zu unterstützen. Auf lange Sicht sollte es Sie vor unerwarteten Ergebnissen in Ihren Bedingungen bewahren.
Was bedeutet das? Welche Art von unerwartete Ergebnisse sprechen sie? Was könnte ich sonst von einem Array-Vergleich erwarten, als wenn true zurückgegeben würde, wenn die Arrays dieselben Elemente an derselben Position enthalten? Warum funktioniert die Gleichheitsfunktion unter
List
, aber nicht unterArray
?Wie kann ich die Gleichheitsfunktion auf Arrays arbeiten lassen?
Ich habe diese Erklärung auch in diesem Buch notiert. Es ist nicht korrekt, siehe meine eigene Antwort unten. Abgesehen von diesem Fehler ist das Buch sehr gut. –
Man könnte kurz sagen, was vor sich geht als: "Java definiert die Wertgleichheit auf Arrays als Referenzgleichheit, nicht Element-für-Element-Gleichheit." –
mögliches Duplikat von [Seltsames Verhalten des Array-Typs] (http://stackoverflow.com/questions/3213368/strange-behaviour-of-the-array-type) – Suma