[英]F# Object constructor
在經過很長一段時間的F#之后,我最近發現了一些C#,我開始意識到“對象構造函數”是一種欺騙自己相信它們正在處理功能對象的好方法。
考慮:
let x = new Something()
x.Key <- 1
x.Value <- 2
由於價值觀的突然變化,這種感覺非常不潔凈。 特別是如果我們保持對象只寫一次,感覺非常不必要在C#中,可以像這樣初始化對象:
var x = new Something() { Key = 1, Value = 2 };
這看起來更好,實際上感覺就像我正在使用一個記錄(幾乎),顯然它只是糖,但它的好糖。
問:假設我們無法控制“Something”(假裝來自某個C#庫),是否有可能在F#中使用這種速記初始化,如果沒有,為什么呢?
是的,F#支持類似於C#對象初始化器的用例,但F#方法更通用。 F#規范14.4方法應用分辨率說:
(在方法成功解決之后)按照以下步驟構建生成的詳細表達式:
這意味着你可以做C#不允許的事情
type Something() =
member val Key = 0 with get,set
member val Value = "" with get,set
static member Create() = Something()
let a = Something(Key = 1, Value = "1") // create instance with constructor, set properties afterwards
let b = Something.Create(Key = 1, Value = "1") // create instance using factory method, set properties afterwards
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.