[F#] Immutable objekty   otázka

Offtopic

mám typ:

type MutableType(?list : List<string>) =

    let mutable myList = defaultArg list []

    member t.List with get() = myList

    member t.Add(item : string) =
        myList <- item :: t.List

    member t.Remove(item : string) =
        myList <- t.List
        |> List.filter (fun i -> i <> item)

let mutableObject = new MutableType(["value0"; "value1"])
mutableObject.Add("value2")
mutableObject.Add("value3")
mutableObject.Add("value4")

a chcem ho prepísať tak aby bol immutable tj aby žiadna jeho časť nemohla meniť svoj stav. Objekt obsahuje zoznam ku ktorému chcem pridávať a odoberať položky. Jediné čo ma napadlo je po každej zmene vrátiť celý nový objekt, je tento postup správny a neni to mrhanie systémovými prostriedkami?

type ImmutableType(?list : List<string>) =
    member t.List = defaultArg list []

    member t.Add(item : string) =
        new ImmutableType(item :: t.List)

    member t.Remove(item : string) =
        new ImmutableType(t.List
        |> List.filter (fun i -> i <> item))

let immutableObject1 = new ImmutableType(["value0"; "value1"])
let immutableObject2 = immutableObject1.Add("value2")
let immutableObject3 = immutableObject2.Add("value3")
let immutableObject4 = immutableObject3.Add("value4")
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback