在clojure中重新加载val
我有一个datomic连接值与一些辅助函数一起定义:在clojure中重新加载val,clojure,datomic,Clojure,Datomic,我有一个datomic连接值与一些辅助函数一起定义: (def uri "datomic:dev://localhost:4334/dab") (defn delete-db [] (d/delete-database uri)) (defn create-db [] (d/create-database uri)) (def conn (d/connect uri)) 问题是,如果我调用delete db,然后创建db,“conn”值中的连接将被删除。因此,我需要一种在执行删除/创建循环
(def uri "datomic:dev://localhost:4334/dab")
(defn delete-db [] (d/delete-database uri))
(defn create-db [] (d/create-database uri))
(def conn (d/connect uri))
问题是,如果我调用delete db,然后创建db,“conn”值中的连接将被删除。因此,我需要一种在执行删除/创建循环后能够“重新加载”conn值的方法。鉴于“def值”的不可变性质,我如何做到这一点
我遇到了这样一个问题:它讨论了不使用conn作为值的原因,但是它只有在执行查询时才有意义。我正在将conn传递到函数中以执行事务。我建议两种解决方案:
atom
中。它明确表示它可能随时间而变化,并为您提供了明确定义的变化特征。您可以公开干净的API函数,如打开连接
和关闭连接
,它们将操纵原子的状态您也可以使用
alter var root
,但我会将其作为最后手段使用,并将其视为黑客攻击。我建议两种解决方案:
atom
中。它明确表示它可能随时间而变化,并为您提供了明确定义的变化特征。您可以公开干净的API函数,如打开连接
和关闭连接
,它们将操纵原子的状态altervar root
,但我会将其作为最后手段使用,并将其视为黑客攻击