Странное поведение типа Array

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

res2: Boolean = true

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

res3: Boolean = true

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

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

res4: Boolean = false

Я использовал 2.8.0.RC7 и 2.8.0.Beta1-preerelease.

Ответ 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 в равенство массива.