в классе F #, как я могу использовать значение в другом значении во время инициализации? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь реплицировать код 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

не будет работать.

как я могу инициализировать этот третийсловарь

1 Ответ

0 голосов
/ 24 октября 2019

Похоже, вы не будете изменять сами поля после создания объекта, поэтому

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