With-expressions При работе с immutable данными общим шаблоном является создание новых значений из существующих для представления нового состояния. Например, если бы наш человек изменил свою фамилию, мы представили бы ее как новый объект, который является копией старого, за исключением другой фамилии. Эту технику часто называют неразрушающей мутацией. Вместо того, чтобы представлять человека с течением времени, запись представляет состояние человека в данный момент времени. Чтобы помочь с этим стилем программирования, записи позволяют новый вид выражения; with-expression : With-expressions используется синтаксис инициализатора объектов, чтобы указать, что отличается в новом объекте от старого объекта. Можно указать несколько свойств. Запись неявно определяет protected "конструктор копирования" - конструктор, который берет существующий объект записи и копирует его поле по полю в новый: Выражение with вызывает конструктор копирования, а затем применяет инициализатор объекта сверху, чт