Понимание изменчивого Seq
Я новичок в Scala и пытаюсь понять mutable Seq
. Поскольку в пакете mutable
я ожидал, что существует метод, который позволяет нам добавлять элемент без копирования всей коллекции.
Но в mutable.Seq
нет метода +=
, но в Buffer
есть. :+
и +:
копируют коллекцию.
Итак, почему он изменен?
Ответы
Ответ 1
Потому что mutable
и growable
- это не одно и то же.
(последний является одним конкретным типом первого: все, что растёт, изменчиво, но не все, что изменчиво, растёт).
mutable.Seq
имеет update
, что позволяет вам изменять элемент по заданному индексу, но он не растет и не уменьшается.
Buffer
является специализацией Seq
, которая является одновременно изменяемой и устойчивой.
Ответ 2
Как объясняется в документации, mutable.Seq
добавляет метод обновления collection.Seq
. +=
, с другой стороны, определяется в Growable.
В стандартной библиотеке Scala большинство измененных наборов расширяют неизменяемую версию, поэтому они наследуют копирование :+
, +:
.