Синтаксис инициализации объекта

Я только начинаю с F #, и я не могу найти синтаксис для инициализации объекта, как в С# 3.

т.е. учитывая это:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

как написать следующее в F #:

var p = new Person { Name = "John", BirthDate = DateTime.Now };

Ответ 1

Вы можете сделать это следующим образом:

let p = new Person (Name = "John", BirthDate = DateTime.Now)

Ответ 2

ответ от CMS определенно правильный. Вот только одно дополнение, которое также может быть полезно. В F # вы часто хотите написать тип, используя только неизменяемые свойства. При использовании синтаксиса "инициализатор объекта" свойства должны быть изменены. Альтернативой в F # является использование именованных аргументов, что дает вам аналогичный синтаксис, но сохраняет неизменные вещи:

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue

Теперь мы можем написать:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

В коде требуется указать имя, но день рождения - необязательный аргумент с некоторым значением по умолчанию.