В Программирование в Scala авторы пишут, что функция Scala ==
сравнивает значение равенства вместо ссылочного равенства.
Это работает как ожидается в списках:
scala> List(1,2) == List(1,2)
res0: Boolean = true
Однако он не работает с массивами:
scala> Array(1,2) == Array(1,2)
res1: Boolean = false
Вместо этого авторы рекомендуют использовать sameElements:
scala> Array(1,2).sameElements(Array(1,2))
res2: Boolean = true
В качестве объяснения они пишут:
Хотя это может показаться несогласованностью, поощрение явного теста на равенство двух изменяемых структур данных является консервативным подходом со стороны разработчиков языка. В конечном счете, это должно спасти вас от неожиданных результатов в ваших условностях.
-
Что это значит? О каких неожиданных результатах они говорят? Что еще я могу ожидать от сравнения массива, чем вернуть true, если массивы содержат одни и те же элементы в одной и той же позиции? Почему функция equals работает на
List
, но не наArray
? -
Как заставить функцию equals работать с массивами?