Ich habe mich gefragt, warum das Buffer und List-Objekt mit einem Ergebnis von True verglichen werden kann?
Ich dachte immer, da sie aus verschiedenen Klassen stammen, haben sie um falsch zu sein, wenn sie verglichen werden. Kann mir jemand erklären, warum es so umgesetzt wird?
Aus Ссылка
Die Sammlungsbibliotheken haben einen einheitlichen Ansatz für Gleichheit und Hashing. Die Idee besteht darin, Sammlungen in Sätze, Karten und Sequenzen zu unterteilen. Sammlungen in verschiedenen Kategorien sind immer ungleich. Zum Beispiel ist Set (1, 2, 3) ungleich List (1, 2, 3), obwohl sie die gleichen Elemente enthalten. Auf der anderen Seite sind Sammlungen innerhalb der gleichen Kategorie genau dann gleich, wenn sie dieselben Elemente haben (für Folgen: dieselben Elemente in der gleichen Reihenfolge). Beispiel: List (1, 2, 3) == Vektor (1, 2, 3) und HashSet (1, 2) == Treeset (2, 1).
Für die Gleichheitsüberprüfung spielt es keine Rolle, ob eine Sammlung änderbar oder unveränderbar ist. (...)
Es liegt also daran, dass scala.collection.mutable.Buffer und List zur gleichen Kategorie (Sequenz) gehören und die Gleichheit dann mit gleichen Elementen definiert ist.
List
und Buffer
sind beide scala.collection.Seq
. Sie haben möglicherweise duplizierte Elemente, die aufgezählt werden können (dh erstes Element, zweites Element usw.).
Die Tatsache, dass eine List
und die andere Buffer
ist, ist nur ein Implementierungsdetail.
Eine bessere Frage wäre, warum ein scala.collection.immutable.Seq
und ein scala.collection.mutable.Seq
gleich sein können, und die Antwort ist, dass die Veränderlichkeit in Bezug auf den Vergleich nicht relevant ist.