有没有办法按名称获取名称空间对象?例如:
(def ns-symbol (ns-name *ns*)) ;; get namespace name as symbol
(def ns-object (ns-by-name ns-as-str)) ;; convert it back to namespace object
所以在这个例子中我需要函数ns-by-name
。
答案 0 :(得分:3)
(ns-name *ns*)
返回的符号不是字符串,因此你的ns-as-str被错误命名...
(type (ns-name *ns*))
clojure.lang.Symbol
鉴于此,将其转换回来就像......一样简单。
(find-ns (ns-name *ns*))
#<Namespace user>
如果您确实希望命名空间的名称是字符串...
(def ns-as-str (str (ns-name *ns*)))
(def ns-object (find-ns (symbol ns-as-str))
答案 1 :(得分:2)
find-ns
函数可能会起到作用:
user=> (def ns-as-str (ns-name *ns*))
#'user/ns-as-str
user=> (def ns-object (find-ns ns-as-str))
#'user/ns-object
user=> ns-object
#<Namespace user>