В Меркурии я могу использовать:
A = B^some_field := SomeValue
, чтобы связать A с копией B, за исключением того, что some_field
равно SomeValue
вместо того, что было в B. Я считаю, что эквивалент Haskellчто-то вроде:
a = b { some_field = some_value }
Есть ли у Scala что-то вроде этого для "изменения" неизменяемых значений.Похоже, альтернативой будет иметь конструктор, который напрямую устанавливает каждое поле в экземпляре, что не всегда идеально (если есть инварианты, которые должен поддерживать конструктор).Кроме того, было бы очень неуклюже и гораздо более хрупко, если бы мне пришлось явно передавать каждое другое значение в экземпляре, для которого я хочу иметь измененную копию.
Я не мог ничего найти по этому поводу, прибегая к помощи иликраткий обзор справочника по языку или «Scala By Example» (который я прочитал от начала до конца, но еще не освоил все, так что он вполне может быть там).
Iвидно, что эта функция может иметь некоторые странные взаимодействия с защитой доступа и подклассами в стиле Java ...