Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här meddelandet ges när ett postfält tilldelas på ett föränderligt sätt, men postfältet har inte markerats som föränderligt.
I följande kod deklareras en post med oföränderliga fält, en instans av posten skapas och ett fält i posten tilldelas på ett föränderligt sätt, vilket visar felet:
type Food = { Kind: string
DaysOld: int }
let apple = { Kind = "apple"
DaysOld = 10 }
apple.Kind <- "orange"
Den här koden resulterar i följande utdata:
error FS0005: This field is not mutable
Här tilldelades det oföränderliga postfältet Kind strängvärdet "orange", men F# stöder inte föränderlig tilldelning om inte fältet uttryckligen markeras på det sättet.
För att lösa det här meddelandet måste du antingen ändra hur fältet definieras eller hur du ställer in det nya värdet.
Om du faktiskt avsåg att posten skulle ha ett föränderligt fält (vilket är en ganska sällsynt metod) kan du markera fältet som mutable i typdefinitionen, som du ser här:
type Food = { mutable Kind: string
DaysOld: int }
let apple = { Kind = "apple"
DaysOld = 10 }
apple.Kind <- "orange"
Det är dock mer idiomatiskt i F# att utföra en oföränderlig uppdatering av en post via with uttrycket, vilket skapar en kopia av den ursprungliga posten med de fält som du angav inställda på nya värden som visas här:
type Food = { Kind: string
DaysOld: int }
let apple = { Kind = "apple"
DaysOld = 10 }
let orange = { apple with Kind = "orange" }