代码之家  ›  专栏  ›  技术社区  ›  Thomas

在F#类中,如何在初始化时在另一个值中使用一个值?

  •  1
  • Thomas  · 技术社区  · 6 年前

    我试图复制有三个字典的C#代码:

    Dictionary<string, float> DictionaryA = new Dictionary<string, float>();
    Dictionary<string, float> DictionaryB = new Dictionary<string, float>();
    Dictionary<MyEnum, Dictionary<string, float>> Dictionaries
        = new Dictionary<MyEnum, Dictionary<string, float>>();
    

    在构造器中:

    Dictionaries[MyEnum.A] = DictionaryA
    Dictionaries[MyEnum.B] = DictionaryB
    

    所以,在F#中,我这样做:

    member val private DictionaryA = new Dictionary<string, float>()
    member val private DictionaryB = new Dictionary<string, float>()
    

    但是,在构造函数中,似乎“this”不可用:

    do
        this.Dictionaries.Add(MyEnum.A, this.DictionaryA) |> ignore
        this.Dictionaries.Add(MyEnum.B, this.DictionaryB) |> ignore
    

    行不通。

    我如何初始化第三本字典?

    0 回复  |  直到 6 年前
        1
  •  0
  •   CaringDev    6 年前

    在构造对象之后,似乎不会对字段本身进行变异,所以

    open System.Collections.Generic
    
    type Foo() =
        let a = new Dictionary<string, float>()
        let b = new Dictionary<string, float>()
        let t = new Dictionary<int, Dictionary<string, float>>()
        do
            t.Add(1, a)
            t.Add(2, b)