Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Выражение копии и обновления записи — это выражение , копирующее существующую запись, обновляет указанные поля и возвращает обновленную запись.
Синтаксис
{ record-name with
updated-labels }
{| anonymous-record-name with
updated-labels |}
Замечания
Записи и анонимные записи по умолчанию неизменяемы, поэтому невозможно обновить существующую запись. Чтобы создать обновленную запись, все поля записи необходимо будет указать еще раз. Чтобы упростить эту задачу, можно использовать выражение копирования и обновления. Это выражение принимает существующую запись, создает новый из того же типа, используя указанные поля из выражения и отсутствующие поля, указанные выражением.
Это может быть полезно при копировании существующей записи и, возможно, изменении некоторых значений поля.
Например, только что созданная запись.
let myRecord2 =
{ MyRecord.X = 1
MyRecord.Y = 2
MyRecord.Z = 3 }
Чтобы обновить только два поля в этой записи, можно использовать выражение копирования и обновления записи:
let myRecord3 = { myRecord2 with Y = 100; Z = 2 }
Вложенная копия и обновление записей
В F# 7.0 и более поздних версиях выражение копирования и обновления было улучшено для поддержки обновлений в вложенных полях записей. Эта функция обеспечивает более краткий синтаксис при работе с глубоко вложенными записями.
Рассмотрим следующий пример:
Перед
type SteeringWheel = { Type: string }
type CarInterior = { Steering: SteeringWheel; Seats: int }
type Car = { Interior: CarInterior; ExteriorColor: string option }
let beforeThisFeature x =
{ x with Interior = { x.Interior with
Steering = {x.Interior.Steering with Type = "yoke"}
Seats = 5
}
}
После
С помощью новой функции можно использовать нотацию точек для достижения вложенных полей и их непосредственного обновления:
let withTheFeature x =
{ x with Interior.Steering.Type = "yoke"; Interior.Seats = 5 }
Этот синтаксис устраняет необходимость в нескольких with выражениях. Вместо этого он позволяет указывать обновления для вложенных полей напрямую, позволяя обновлять несколько полей (даже на разных уровнях вложения) в одном выражении.
Анонимные записи
То же расширение синтаксиса также работает для анонимных записей. Кроме того, этот синтаксис можно использовать для копирования и обновления регулярных записей в анонимные, добавляя новые поля в процессе:
let updatedRecord =
{| originalRecord with
Interior.Seats = 4;
Price = 35000 |}
Эта гибкость гарантирует, что один и тот же краткий синтаксис применяется к работе с обычными или анонимными записями.