我正在尝试实现一个get-database
函数,该函数在第一次调用 Monger 时从 Monger 检索数据库引用,记住原子中的值并在后续调用中直接返回它。我当前的代码如下所示:
(def database (atom nil))
(defn get-database
[]
(compare-and-set! database nil
(let [db (:db (mg/connect-via-uri (System/getenv "MONGOLAB_URI")))] db))
@database)
let
问题是即使compare-and-set!
返回 false(即database
is not ) ,该子句似乎也会被评估nil
。有没有办法让这个懒惰地评估,这样我就不会受到检索 Monger 连接的惩罚,或者这种方法从根本上被误导了?