Вы можете прочитать здесь:
http://ofps.oreilly.com/titles/9780596155957/AdvancedObjectOrientedProgramming.html#EqualityOfObjects
но похоже, что если вы сделали: filesHere.sameElements(filesHere2)
это должно быть правдой.
Javadoc для этого находится здесь: http://www.scala-lang.org/api/2.6.0/scala/IterableProxy.html#sameElements%28Iterable%5BB%5D%29
ОБНОВЛЕНИЕ:
Несколько фрагментов из первой ссылки, которые могут быть полезны:
В Java, C++ и C# оператор == проверяет ссылку, а не равенство значений. Напротив, оператор Ruby == проверяет равенство значений. К какому бы языку вы ни привыкли, обязательно помните, что в Scala == проверяет равенство значений.
Что касается ==
, который не работает должным образом в списках:
Хотя это может показаться несоответствием, поощрение явной проверки равенства двух изменяемых структур данных является консервативным подходом со стороны разработчиков языка. В долгосрочной перспективе это должно уберечь вас от неожиданных результатов в ваших условных выражениях.
ОБНОВЛЕНИЕ 2:
Основываясь на комментариях Рафаэля, я просмотрел спецификацию, и она была датирована двумя днями ранее для самого последнего обновления, и я вижу их по адресу 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
Итак, похоже, что определение не изменилось в Scala 2.10.2, поскольку спецификация кажется последовательной. Если поведение отличается, то если вы пишете модульный тест, его следует отправить как ошибку для Scala.
person
James Black
schedule
06.08.2010