Как HashMultiMap видоизменяется в экземпляре типа - PullRequest
2 голосов
/ 12 марта 2012

Как добавить пару ключ-значение в экземпляр на HashMultiMap, который является членом объявленного пользователем типа? может я что то не так делаю

 #r"FSharp.PowerPack"
    type Test() = 
        member this.tmp = new HashMultiMap<string, int>(HashIdentity.Structural)
        member this.add name test = 
            this.tmp.Add(name, test)
    let t1 = new Test()
    t1.add "aaa" 1
    let a1 = t1.tmp.TryFind("aaa")
    let b1 = t1.tmp.Count
    //+
    let t2 = new HashMultiMap<string, int>(HashIdentity.Structural)
    t2.Add("aaa", 1)
    let a2 = t2.TryFind("aaa")
    let b2 = t2.Count

Выход:

--> Referenced 'C:\Program Files\FSharpPowerPack-1.9.9.9\bin\FSharp.PowerPack.dll'


type Test =
  class
    new : unit -> Test
    member add : name:string -> test:int -> unit
    member tmp : HashMultiMap<string,int>
  end
val t1 : Test
val a1 : int option = None
val b1 : int = 0
val t2 : HashMultiMap<string,int>
val a2 : int option = Some 1
val b2 : int = 1

1 Ответ

3 голосов
/ 12 марта 2012

Каждый раз, когда вы звоните this.tmp, вы создаете новую мультикарту - вы хотите использовать

type Test() = 
    let map =  new HashMultiMap<string, int>(HashIdentity.Structural)
    member this.tmp = map
    member this.add name test = 
        map.Add(name, test)

обратите внимание, что new вызывается только один раз

...