Как заставить неизменные наборы Scala содержать неизменные объекты

Я оцениваю Scala и имею проблему с ее неизменными наборами.

Я хочу сделать неизменные наборы, которые являются абсолютно неизменными, правильными вниз через все содержащие в нем объекты, объекты, на которые они ссылаются, до бесконечности.

Существует ли простой способ сделать это?

Код http://www.finalcog.com/immutable-containers-scala иллюстрирует то, чего я пытаюсь достигнуть, и противная работа вокруг (ImmutablePoint).

Проблема с обходным решением состоит в том, что каждый раз я хочу изменить объект, я должен вручную сделать новую копию. Я понимаю, что время выполнения должно будет реализовать копию на записи, но это может быть сделано очевидным для разработчика?

Я предполагаю, что надеюсь делать Неизменные Объекты, где методы изменяют текущее объектное состояние, но весь другой 'val' (и весь неизменный контейнер) ссылки на объект сохраняют 'старое' состояние.

6
задан Eugene Yokota 15 December 2010 в 19:29
поделиться

2 ответа

Это невозможно в scala прямо из коробки с помощью какой-либо конкретной языковой конструкции, если вы не следовали идиоме, которая все ваших объектов неизменяемы, и в этом случае такое поведение предоставляется бесплатно!

В версии 2.8 именованные параметры сделали «конструкторы копирования» довольно удобными с точки зрения удобочитаемости. Но вы правы, это работает как копирование при записи. Запрашиваемое поведение, когда "текущий" объект является единственным измененным, полностью противоречит тому, как работает JVM, к сожалению (для вас)!

На самом деле фраза «текущий объект» не имеет смысла; на самом деле вы имеете в виду "текущую ссылку " ! Все другие ссылки (вне текущей лексической области), которые указывают на тот же объект, эээ, указывают на тот же объект ! Есть только один объект !

Следовательно, этот объект просто не может казаться изменяемым с точки зрения текущей лексической области видимости, но неизменным для других

9
ответ дан 9 December 2019 в 22:34
поделиться

. Если вас интересует более общая теория о том, как эффективно обрабатывать обновления неизменяемых структур данных,

http: //en.wikipedia.org/wiki/Zipper_%28data_structure%29

может оказаться интересным.

2
ответ дан 9 December 2019 в 22:34
поделиться
Другие вопросы по тегам:

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