名称空间对象的名称

时间:2012-04-17 23:27:21

标签: clojure namespaces

有没有办法按名称获取名称空间对象?例如:

(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

2 个答案:

答案 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>