2012-04-17 208 views
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 

所以在這個例子中,我需要功能ns-by-name

回答

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)) 
+0

其實我很感興趣的是如何從任何表示中獲取名稱空間對象,無論是字符串還是符號,所以沒有多注意返回類型'ns-name'。感謝您的注意,併爲您解答。 – ffriend 2012-04-18 00:09:02

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> 
+0

'發現,ns'似乎是更地道,所以我接受了@ sw1nn的答案,但'創建-ns'肯定會工作了。謝謝。 – ffriend 2012-04-18 00:10:56

相關問題