相关疑难解决方法(0)

如何实现Singleton Pattern(语法)

我有一个从外部源刷新的数据缓存,我想限制我的应用程序内部的缓存(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#中有这种语法的首选模式吗?

singleton f#

9
推荐指数
4
解决办法
3294
查看次数

标签 统计

f# ×1

singleton ×1