я читал по книге "Скала для нетерпеливых"
В главе 3 встречается этот код
val a = Array(1, 7, 2, 9) scala.util.Sorting.quickSort(a) // a is now Array(1, 2, 7, 9)
Я думал val a должно быть неизменным в скале? Что здесь происходит?
val a
Код не меняет привязку a. Он мутирует объект, на который ссылается a. a по-прежнему указывает на тот же объект, что и раньше, изменилось только внутреннее состояние этого объекта.
a
В документации говорится, что массив отсортирован по месту ( полужирный выделение):
def quickSort[K](a: Array[K])(implicit arg0: math.Ordering[K]): Unit Сортировать массив a с быстрой сортировкой, используя упорядочение по его элементам. Этот алгоритм сортирует вместо , поэтому дополнительная память не используется, кроме того, что может потребоваться для упаковки отдельных элементов во время сравнения.
def quickSort[K](a: Array[K])(implicit arg0: math.Ordering[K]): Unit
Сортировать массив a с быстрой сортировкой, используя упорядочение по его элементам. Этот алгоритм сортирует вместо , поэтому дополнительная память не используется, кроме того, что может потребоваться для упаковки отдельных элементов во время сравнения.