1

语境

这是 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 确实存在。

问题

我该如何解决?我希望能够

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

谢谢!

4

1 回答 1

1

你可以试试这个:

(if-not (find-ns 'hotswap)
  (intern (create-ns 'hotswap) 'global-kv-store (atom {})))
于 2012-05-26T07:24:39.543 回答