У меня есть кеш данных, который обновляется из внешнего источника, и я хочу ограничить свой доступ к его кешу (только для чтения) внутри моего приложения. Я не хочу обновлять источник данных каждый раз, когда мне нужен доступ к нему (т. Е. При создании экземпляра и извлекать все необходимые данные, так как существует довольно много данных, которые обновляются).
type MySingleton =
[<DefaultValue>]
static val mutable private instance: MySingleton
static member GetInstance() =
instance
Полагаю, это одна из проблем, связанных с реализацией проекта и попыткой выучить язык одновременно. Я знаю, что логика должна быть
if instance is null
synchronize
if instance is null
instance = new MySingleton()
но отсутствие нуля бросает меня в тупик. Я думаю, что я могу использовать тип опции и т. Д., Но это бросает меня за цикл
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*
эта логика неверна согласно компилятору ...
if Helper.notExists MySingleton.instance then
MySingleton.instance <- Some(new MySingleton())
MySingleton.instance
я должен вместо этого использовать операторы IF? Есть ли предпочтительный шаблон для этого синтаксиса в f #?