Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A másolási és frissítési rekord kifejezés olyan kifejezés, amely átmásol egy meglévő rekordot, frissíti a megadott mezőket, és visszaadja a frissített rekordot.
Syntax
{ record-name with
updated-labels }
{| anonymous-record-name with
updated-labels |}
Megjegyzések
A rekordok és a névtelen rekordok alapértelmezés szerint nem módosíthatók, ezért meglévő rekord nem frissíthető. Frissített rekord létrehozásához a rekord összes mezőjét újra meg kell adni. A feladat egyszerűsítése érdekében egy másolási és frissítési kifejezés használható. Ez a kifejezés egy meglévő rekordot vesz fel, egy újat hoz létre ugyanahhoz a típushoz a kifejezés megadott mezőinek és a kifejezés által megadott hiányzó mezőnek a használatával.
Ez akkor lehet hasznos, ha át kell másolnia egy meglévő rekordot, és esetleg módosítania kell a mezőértékek egy részét.
Vegyük például az újonnan létrehozott rekordot.
let myRecord2 =
{ MyRecord.X = 1
MyRecord.Y = 2
MyRecord.Z = 3 }
Ha csak két mezőt szeretne frissíteni a rekordban, használhatja a másolási és frissítési rekordkifejezést:
let myRecord3 = { myRecord2 with Y = 100; Z = 2 }
Beágyazott rekord másolása és frissítése
Az F# 7.0-s és újabb verzióiban a másolási és frissítési kifejezés tovább lett fejlesztve a beágyazott rekordmezők frissítéseinek támogatásához. Ez a funkció tömörebb szintaxist tesz lehetővé a mélyen beágyazott rekordok használatakor.
Vegyük a következő példát:
Előtte
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
}
}
Utána
Az új funkcióval pont jelöléssel elérheti a beágyazott mezőket, és közvetlenül frissítheti őket:
let withTheFeature x =
{ x with Interior.Steering.Type = "yoke"; Interior.Seats = 5 }
Ez a szintaxis nem igényel több with kifejezést. Ehelyett lehetővé teszi a beágyazott mezők frissítéseinek közvetlen megadását, ugyanakkor lehetővé teszi több mező frissítését (akár a beágyazás különböző szintjein is) ugyanabban a kifejezésben.
Névtelen rekordok
Ugyanez a szintaxiskiterjesztés névtelen rekordok esetében is működik. Ezen a szintaxison kívül a normál rekordokat névtelen rekordokká is másolhatja és frissítheti, új mezőket adva hozzá a folyamathoz:
let updatedRecord =
{| originalRecord with
Interior.Seats = 4;
Price = 35000 |}
Ez a rugalmasság biztosítja, hogy ugyanaz a tömör szintaxis érvényes legyen, függetlenül attól, hogy normál vagy névtelen rekordokkal dolgozik.