Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit bericht wordt weergegeven wanneer een recordveld onveranderbaar is toegewezen, maar het recordveld niet is gemarkeerd als veranderlijk.
In de volgende code wordt een record met onveranderbare velden gedeclareerd, een exemplaar van die record gemaakt en wordt een veld van die record muteerbaar toegewezen, met de fout:
type Food = { Kind: string
DaysOld: int }
let apple = { Kind = "apple"
DaysOld = 10 }
apple.Kind <- "orange"
Deze code resulteert in de volgende uitvoer:
error FS0005: This field is not mutable
Hier is aan het onveranderbare recordveld Kind de tekenreekswaarde 'oranje' toegewezen, maar F# biedt geen ondersteuning voor onveranderbare toewijzingen, tenzij het veld expliciet op die manier wordt gemarkeerd.
Als u dit bericht wilt oplossen, moet u de manier wijzigen waarop het veld wordt gedefinieerd of hoe u de nieuwe waarde instelt.
Als u eigenlijk voor de record een veranderlijk veld hebt (wat vrij zeldzaam is) kunt u het veld markeren zoals mutable in de typedefinitie, zoals hier wordt weergegeven:
type Food = { mutable Kind: string
DaysOld: int }
let apple = { Kind = "apple"
DaysOld = 10 }
apple.Kind <- "orange"
Het is echter meer idiomatisch in F# om een onveranderbare update van een record uit te voeren via de with expressie, waarmee een kopie van de oorspronkelijke record wordt gemaakt met de velden die u hebt opgegeven op nieuwe waarden, zoals hier wordt weergegeven:
type Food = { Kind: string
DaysOld: int }
let apple = { Kind = "apple"
DaysOld = 10 }
let orange = { apple with Kind = "orange" }