Syntaxis voor objectinitialisatie

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 newweglaten en minder uitgebreide syntaxis gebruiken:

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

https://docs.microsoft.com /nl-nl/dotnet/fsharp/taalreferentie/leden/constructeurs

Other episodes