如何在Clojure中获得var的命名空间?
问题描述:
我目前使用的工作以下 - 但似乎有点cludge如何在Clojure中获得var的命名空间?
(defn get-namespace
[qualified-var]
{:pre [(var? qualified-var)]}
(the-ns
(symbol
(apply str (drop 2 (first (str/split (str qualified-var) #"/")))))))
忽略了丑陋的字符串分割(快速和肮脏)的是有一个内置做到这一点?
答
var的元数据包含对:ns
密钥下其名称空间的引用。那将是定义var的命名空间。 var的元数据可以使用meta
函数访问。全部放在一起,我们得到(-> some-var meta :ns)
,我们可以试验一下:
(def x "foo")
;; #'user/x
(-> #'x meta :ns)
;; #object[clojure.lang.Namespace 0x396bcdb0 "user"]
(-> #'clojure.core/map meta :ns)
;; #object[clojure.lang.Namespace 0x28412381 "clojure.core"]
完整的例子可能是这样的:
(defn var-namespace
[qualified-var]
{:pre [(var? qualified-var)]}
(-> qualified-var meta :ns))
尝试'( - >合格-VAR元:NS)' – ez121sl
你想写这个aswer:D或者我应该删除这个问题? – beoliver
似乎有用的问答,或者得到@ ez121sl回答并接受或回答自己,并接受 – Josh