Ildjarn уже ответил на ваш вопрос, но позвольте мне добавить примечание о стиле кодирования - я думаю, что большинство программ F # в наши дни предпочитают синтаксис неявного конструктора, где вы определяете один неявный конструктор как часть type
декларации. Это обычно делает код намного проще. Вы могли бы написать что-то вроде:
type Bah() =
let index = 0
let inputString = ""
let tokens = new Dictionary<string, string>()
do tokens.Add("bazKey", "barValue")
member x.Foo = "!"
Это определяет конструктор без параметров и частные поля (например, index
). В вашем примере это не имеет особого смысла (потому что все поля неизменны, поэтому index
всегда будет нулевым). Я полагаю, у вас есть другой конструктор, и в этом случае вы можете написать что-то вроде:
type Baf(index:int, inputString:string, tokens:Dictionary<string, string>) =
new() =
let tokens = new Dictionary<string, string>()
tokens.Add("bazKey", "barValue")
Baf(0, "", tokens)
Здесь вы получаете два конструктора - один без параметров и один, который принимает три параметра. Вы также можете сделать неявный конструктор приватным и предоставлять только более конкретные случаи:
type Baf private (index:int, inputString:string, tokens:Dictionary<string, string>) =
// (...)
В качестве дополнительного примечания я также изменил наименование с _index
на index
, потому что я не думаю, что руководящие принципы F # рекомендуют использовать подчеркивания (хотя, это может иметь смысл для полей, объявленных с использованием val
)