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 };
87
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
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
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