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")
|