私はF#から始めたばかりで、C#3のようにオブジェクトの初期化を行う構文が見つかりません。
すなわちこれを与えた:
public class Person {
public DateTime BirthDate { get; set; }
public string Name { get; set; }
}
F#で次のように記述する方法:
var p = new Person { Name = "John", BirthDate = DateTime.Now };
私はF#から始めたばかりで、C#3のようにオブジェクトの初期化を行う構文が見つかりません。
すなわちこれを与えた:
public class Person {
public DateTime BirthDate { get; set; }
public string Name { get; set; }
}
F#で次のように記述する方法:
var p = new Person { Name = "John", BirthDate = DateTime.Now };
回答:
CMSからの答えは間違いなく正しいです。ここにも役立つかもしれない追加が1つだけあります。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")
コードでは名前を指定する必要がありますが、生年月日はオプションの引数であり、デフォルト値がいくつかあります。
new
キーワードを省略して、冗長な構文を使用することもできます。
let p = Person(BirthDate = DateTime.Now, Name = "John")
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/members/constructors