1

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

(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

所以在这个例子中我需要 function ns-by-name

4

2 回答 2

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))
于 2012-04-18T00:01:05.460 回答
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>
于 2012-04-17T23:59:17.523 回答