任何更简单的方法来制作懒惰的财产?

时间:2015-02-12 13:43:48

标签: f#

我想只在需要时加载数据。

一开始我使用了自动属性。

type DataFromCsv(path) =
    ...
    member val A1 = MyCsvType.Load(path1)
    member val A2 = MyCsvType.Load(path2)
    member val A3 = MyCsvType.Load(path3)
    member val A4 = MyCsvType.Load(path4)

在我实例化对象let my_data = DataFromCsv(path)之前,它是一种懒惰,此时所有文件都被加载,这是不理想的。

我的另一个尝试是为每个属性使用lazy

type DataFromCsv(path) =
    let a1 = lazy (MyCsvType.Load(path1))
    let a2 = lazy (MyCsvType.Load(path2))
    member this.A1 = a1.Force()
    member this.A2 = a2.Force()

它有效,但我觉得它有点麻烦。此外,a1仅由member this.A1使用,但它在对象中的任何位置都可见。

那么,是否有一种自动懒惰的属性,以便我可以更优雅地做这些事情?

0 个答案:

没有答案