Странное поведение Типа массива с '==' оператор

scala> List(1,2,3) == List(1,2,3)

res2: Boolean = true

scala> Map(1 -> "Olle") == Map(1 -> "Olle")

res3: Boolean = true

Но при попытке сделать то же с Массивом, это не работает то же. Почему?

scala> Array('a','b') == Array('a','b')

res4: Boolean = false

Я использовал 2.8.0. RC7 и 2.8.0. Beta1-предварительный-выпуск.

10
задан Johnny 12 April 2018 в 09:32
поделиться

1 ответ

Поскольку определение "равно" для массивов заключается в том, что они ссылаются на один и тот же массив.

Это согласуется с равенством массивов Java, использующим Object.Equals, поэтому он сравнивает ссылки.

Если вы хотите проверить попарные элементы, используйте sameElements

Array('a','b').sameElements(Array('a','b'))

или deepEquals, которые были устарели в 2.8, поэтому вместо этого используйте:

Array('a','b').deep.equals(Array('a','b').deep)

Есть хорошее обсуждение Nabble о равенстве массивов.

19
ответ дан 3 December 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: