Składnia inicjalizacji obiektu

Dopiero zaczynam od F # i nie mogę znaleźć składni do inicjalizacji obiektów jak w C # 3.

Czyli biorąc pod uwagę to:

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

Jak napisać w F#:

var p = new Person { Name = "John", BirthDate = DateTime.Now };
Author: abatishchev, 2008-12-16

2 answers

Możesz to zrobić tak:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
 116
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 14:26:57

Odpowiedź z CMS jest zdecydowanie poprawna. Oto tylko jeden dodatek, który może być również pomocny. W F#, często chcesz napisać Typ tylko przy użyciu właściwości immutable. Przy użyciu składni "object initializer" właściwości muszą być zmienne. Alternatywą W F# jest użycie nazwanych argumentów, co daje podobną składnię, ale zachowuje rzeczy niezmienne:

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

Teraz możemy napisać:

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

Kod wymaga podania nazwy, ale birthday jest opcjonalnym argumentem z pewną wartością domyślną.

 91
Author: Tomas Petricek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-29 14:36:45