Si consiglia di leggere qui:
http://ofps.oreilly.com/titles/9780596155957/AdvancedObjectOrientedProgramming.html#EqualityOfObjects
ma sembra che se hai fatto: filesHere.sameElements(filesHere2)
che dovrebbe essere vero.
Javadoc per questo è qui: http://www.scala-lang.org/api/2.6.0/scala/IterableProxy.html#sameElements%28Iterable%5BB%5D%29
UPDATE:
Un paio di frammenti dal primo link che possono essere utili:
In Java, C++ e C# l'operatore == verifica il riferimento, non l'uguaglianza di valore. Al contrario, l'operatore == di Ruby verifica l'uguaglianza dei valori. Qualunque sia la lingua a cui sei abituato, ricordati che in Scala, == sta testando l'uguaglianza dei valori.
In riferimento a ==
non funziona come previsto su Liste:
Anche se questo può sembrare una contraddizione, favorendo un test esplicito della parità di due strutture di dati mutabili è un approccio conservativo da parte del progettisti di linguaggi A lungo termine, dovrebbe salvarti da risultati imprevisti nei tuoi condizionali.
UPDATE 2:
Sulla base di commenti da Raffaello ho guardato le specifiche, ed era datata due giorni fa per l'aggiornamento più recente, e vedo questi a http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf:
Method equals: (Any)Boolean is structural equality, where two instances
are equal if they both belong to the case class in question and they have equal
(with respect to equals) constructor arguments.
class AnyRef extends Any {
def equals(that: Any): Boolean = this eq that
final def eq(that: AnyRef): Boolean = . . . // reference equality
Quindi, sembra che la definizione non sia cambiata in Scala 2.10.2, poiché le specifiche sembrano essere coerenti. Se il comportamento è diverso, se scrivi un test unitario dovrebbe essere inviato come errore per Scala.
Bella risorsa, grazie! Mostra come affrontare il problema menzionato sopra (usando sameElements, OK!) Ma non spiega perché il problema (o la "sorpresa") si verifichi come in scala> Array (1, 2) == Array (1 , 2) res0: Boolean = false – acherm
@acherm - Ecco perché ho inserito l'aggiornamento, l'ultima citazione dell'articolo dovrebbe spiegare il perché, per incoraggiare test espliciti per l'uguaglianza. –
Un'altra interessante discussione qui: http://scalide.blogspot.com/2009/05/hashcode-equals-in-scala-28-collections.html Questo non chiarisce completamente la situazione, ma illustra che "l'uguaglianza è un argomento interessante, semplicemente a causa dell'incredibile varietà di interpretazioni che ci sono in esso. " Guardando Array.scala (http://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_0_final/src//library/scala/Array.scala), il metodo equals() non è definito . – acherm