ไวยากรณ์การเริ่มต้นอ็อบเจ็กต์


99

ฉันเพิ่งเริ่มต้นด้วย 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 };

คำตอบ:



98

คำตอบจาก CMS ถูกต้องแน่นอน นี่เป็นเพียงส่วนเพิ่มเติมเดียวที่อาจเป็นประโยชน์ ใน F # คุณมักต้องการเขียนประเภทโดยใช้คุณสมบัติที่ไม่เปลี่ยนรูป เมื่อใช้ไวยากรณ์ "object initializer" คุณสมบัติจะต้องเปลี่ยนแปลงได้ อีกทางเลือกหนึ่งใน 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")

รหัสกำหนดให้คุณต้องระบุชื่อ แต่วันเกิดเป็นอาร์กิวเมนต์ทางเลือกที่มีค่าเริ่มต้นบางค่า


ขอบคุณโทมัส แต่ในกรณีของคนที่อยู่ในอีกการชุมนุมและผมก็ไม่สามารถเปลี่ยนได้ :(
เมาริซิโอ Scheffer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.