Ik begin net met F# en ik kan de syntaxis niet vinden om objectinitialisatie uit te voeren zoals in C# 3.
D.w.z. gegeven dit:
public class Person {
public DateTime BirthDate { get; set; }
public string Name { get; set; }
}
hoe schrijf ik het volgende in F#:
var p = new Person { Name = "John", BirthDate = DateTime.Now };
Antwoord 1, autoriteit 100%
Je kunt het als volgt doen:
let p = new Person (Name = "John", BirthDate = DateTime.Now)
Antwoord 2, autoriteit 69%
het antwoord van CMS is zeker correct. Hier is slechts één toevoeging die ook nuttig kan zijn. In F# wil je vaak het type schrijven met alleen onveranderlijke eigenschappen. Bij gebruik van de “object initializer”-syntaxis moeten de eigenschappen veranderbaar zijn. Een alternatief in F# is het gebruik van benoemde argumenten, die u een vergelijkbare syntaxis geven, maar de zaken onveranderlijk houden:
type Person(name:string, ?birthDate) =
member x.Name = name
member x.BirthDate = defaultArg birthDate System.DateTime.MinValue
Nu kunnen we schrijven:
let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")
De code vereist dat je de naam opgeeft, maar verjaardag is een optioneel argument met een standaardwaarde.
Antwoord 3
U kunt ook het trefwoord new
weglaten en minder uitgebreide syntaxis gebruiken:
let p = Person(BirthDate = DateTime.Now, Name = "John")
https://docs.microsoft.com /nl-nl/dotnet/fsharp/taalreferentie/leden/constructeurs