Recordexpressies kopiëren en bijwerken
Een expressie voor het kopiëren en bijwerken van records is een expressie waarmee een bestaande record wordt gekopieerd, opgegeven velden worden bijgewerkt en de bijgewerkte record wordt geretourneerd.
Syntaxis
{ record-name with
updated-labels }
{| anonymous-record-name with
updated-labels |}
Opmerkingen
Records en anonieme records zijn standaard onveranderbaar, dus het is niet mogelijk om een bestaande record bij te werken. Als u een bijgewerkte record wilt maken, moeten alle velden van een record opnieuw worden opgegeven. U kunt deze taak vereenvoudigen door een expressie voor kopiëren en bijwerken te gebruiken. Deze expressie neemt een bestaande record, maakt een nieuw type met behulp van opgegeven velden uit de expressie en het ontbrekende veld dat is opgegeven door de expressie.
Dit kan handig zijn wanneer u een bestaande record moet kopiëren en mogelijk enkele veldwaarden moet wijzigen.
Neem bijvoorbeeld een zojuist gemaakte record.
let myRecord2 =
{ MyRecord.X = 1
MyRecord.Y = 2
MyRecord.Z = 3 }
Als u slechts twee velden in die record wilt bijwerken, kunt u de expressie voor het kopiëren en bijwerken van records gebruiken:
let myRecord3 = { myRecord2 with Y = 100; Z = 2 }
Geneste record kopiëren en bijwerken
In F# 7.0 en hoger is de expressie voor kopiëren en bijwerken uitgebreid ter ondersteuning van updates voor geneste recordvelden. Met deze functie kunt u beknoptere syntaxis gebruiken bij het werken met diep geneste records.
Kijk een naar het volgende voorbeeld:
Voor
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
}
}
Na
Met de nieuwe functie kunt u punt-notatie gebruiken om geneste velden te bereiken en deze rechtstreeks bij te werken:
let withTheFeature x =
{ x with Interior.Steering.Type = "yoke"; Interior.Seats = 5 }
Deze syntaxis elimineert de noodzaak van meerdere with
expressies. In plaats daarvan kunt u updates voor geneste velden rechtstreeks opgeven, terwijl meerdere velden (zelfs op verschillende geneste niveaus) in dezelfde expressie kunnen worden bijgewerkt.
Anonieme records
Dezelfde syntaxisextensie werkt ook voor anonieme records. Daarnaast kunt u deze syntaxis gebruiken om reguliere records te kopiëren en bij te werken in anonieme records, waarbij nieuwe velden in het proces worden toegevoegd:
let updatedRecord =
{| originalRecord with
Interior.Seats = 4;
Price = 35000 |}
Deze flexibiliteit zorgt ervoor dat dezelfde beknopte syntaxis van toepassing is, ongeacht of u met gewone of anonieme records werkt.