msdn頁面記錄Records (F#)詳細信息record expressions
爲記錄構造和record patterns
爲解構,後者沒有命名爲它們。 下面是其中同時使用技術算術運算符的例子:構建和解構記錄
// Simple two-dimensional generic vector defintion
type 'a UV =
{ U : 'a; V : 'a }
static member inline (+) ({ U = au; V = av }, { U = bu; V = bv }) =
{ U = au + bu; V = av + bv }
這看似笨拙,不是很可讀。對於解構,有點符號或功能作爲替代。由於點符號操作符在規範(an expression’s type may be inferred from a record label
)的8.4.2節名稱分辨率和記錄字段標籤中有特殊配置,通常不需要註釋。 Accessor功能像let u { U = u } = u
不會給我們任何優勢。
對於構造,我認爲可以爲一個函數作爲記錄構造函數。原來的構造函數訪問甚至可以被限制:
type 'a UV =
internal { U : 'a; V : 'a }
let uv u v = { U = u; V = v }
type 'a UV with
static member inline (+) (a, b) =
uv (a.U + b.U) (a.V + b.V)
這是一個地道的事是什麼?如何在模塊中打包這些函數並處理命名空間問題?
儘管鏡頭非常適合組合,但我並沒有完全跟蹤您在定義某些數據結構時內在實現它們的好處。正如你的[鏈接](http://bugsquash.blogspot.fr/2011/11/lenses-in-f.html)通過擴展方法演示的那樣,它們也可以追溯地引入。這個問題的動機是希望避免在簡潔和可讀性方面重構記錄定義。無論如何,如果您能稍後將鏡頭鎖定,鏡頭如何幫助我? – kaefer
@kaefer我在更新中回答了你。 – Gustavo