Clojure中是否有函数/宏来检查当前'used'的命名空间?哪一个?所以我并不是说'我们目前在哪个命名空间',但是例如,我想知道'{1}}中'clojure.contrib.string'当前是否已被'使用'。我的意思并不是“必需”。
当使用'clojure.contrib.string(通过符号提供的命名空间的名称)时,如何编写一个给出true的函数,否则为false? (defn ns-used?[name](...)
答案 0 :(得分:1)
all-ns接近您所寻找的内容,但它也为您提供了required
未被引用的所有名称空间。
否则ns-refers会为您提供命名空间中引用的所有函数的映射。类似的,也可能是感兴趣的是ns-map和ns-imports,它们为您提供了所有导入的类或记录的映射。
如果要严格查找已引用函数的所有命名空间,可以执行以下操作:
(defn ns-used? [ns]
(let [referred-namespaces (set (map (fn [[k v]] (:ns (meta v))) (ns-refers *ns*)))]
(contains? referred-namespaces (find-ns ns))))
如果您愿意检查命名空间是required
还是used
,那么
(defn ns-used-or-required? [ns]
(contains? (set (all-ns)) (find-ns ns)))
您必须在引号中传递符号:
(ns-used? 'clojure.core)
答案 1 :(得分:0)