Clojure:在另一个名称空间中定义符号

时间:2012-05-26 07:00:13

标签: clojure

上下文

这是init.clj的内容

(ns init)

(defn get-hotswap []
  (filter #(= (ns-name %) 'hotswap) (all-ns)))

(let [x (get-hotswap)]
  (let [old-ns *ns*]
    (if (empty? x)
      (do
        (create-ns 'hotswap)
        (in-ns 'hotswap)
        (def global-kv-store (clojure.core/atom {}))
        (in-ns (ns-name old-ns)))
      (println "Found Hotswap"))))

现在。 hotswap / global-kv-store不存在,但init / global-kv-store确实存在。

问题

我该如何解决这个问题?我希望能够

  • 创建新的命名空间hotswap
  • 然后在其中定义一个新的变量global-kv-store

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

(if-not (find-ns 'hotswap)
  (intern (create-ns 'hotswap) 'global-kv-store (atom {})))