我想只在需要时加载数据。
一开始我使用了自动属性。
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
使用,但它在对象中的任何位置都可见。
那么,是否有一种自动懒惰的属性,以便我可以更优雅地做这些事情?