我有一个从外部源刷新的数据缓存,我想限制我的应用程序内部的缓存(readonly)访问.我不希望每次需要访问它时刷新数据源(即,在实例化时去拉取我需要的所有数据,因为有相当多的数据保持最新).
type MySingleton =
[<DefaultValue>]
static val mutable private instance: MySingleton
static member GetInstance() =
instance
Run Code Online (Sandbox Code Playgroud)
我想这是关于实现项目并试图同时学习语言的问题之一.我知道逻辑需要
if instance is null
synchronize
if instance is null
instance = new MySingleton()
Run Code Online (Sandbox Code Playgroud)
但是缺少null会让我陷入困境.我想我可以使用选项类型等,但它让我循环
type MySingleton =
[<DefaultValue>]
static val mutable private instance: MySingleton option
static member GetInstance() =
match instance with
| Some(i) -> i
| None ->
*MySingleton.instance = new MySingleton()
MySingleton.instance*
Run Code Online (Sandbox Code Playgroud)
根据编译器,逻辑是错误的......
if Helper.notExists MySingleton.instance then
MySingleton.instance <- Some(new MySingleton())
MySingleton.instance
Run Code Online (Sandbox Code Playgroud)
我应该使用IF语句吗?f#中有这种语法的首选模式吗?