Понимание изменчивого Seq

Я новичок в Scala и пытаюсь понять mutable Seq. Поскольку в пакете mutable я ожидал, что существует метод, который позволяет нам добавлять элемент без копирования всей коллекции.

Но в mutable.Seq нет метода +=, но в Buffer есть. :+ и +: копируют коллекцию.

Итак, почему он изменен?

Ответы

Ответ 1

Потому что mutable и growable - это не одно и то же. (последний является одним конкретным типом первого: все, что растёт, изменчиво, но не все, что изменчиво, растёт).

mutable.Seq имеет update, что позволяет вам изменять элемент по заданному индексу, но он не растет и не уменьшается. Buffer является специализацией Seq, которая является одновременно изменяемой и устойчивой.

Ответ 2

Как объясняется в документации, mutable.Seq добавляет метод обновления collection.Seq. +=, с другой стороны, определяется в Growable.

В стандартной библиотеке Scala большинство измененных наборов расширяют неизменяемую версию, поэтому они наследуют копирование :+, +:.