2013-05-20 86 views

回答

7

命名空間是不是一流的ClojureScript,因爲它們是用Clojure。在運行時絕對沒有辦法獲得命名空間。如果你不害怕訪問一些ClojureScript編譯器的內部函數,那麼可以在宏擴展時獲得這些信息。應該可能有一個API - 但我們還沒有。

+0

謝謝!我怕THI會願意和這個代碼工作先進關閉模式下編譯的情況下 – Zubair

6

您可以獲得當前命名空間這一招,它利用了::在當前的命名空間創建一個命名空間的符號爲您的名字:

(namespace ::x) 

你可能不希望使用該值對於任何事情來說,因爲如果代碼被編譯,內部表示將會改變。如果你想驚險的生活,然後在瀏覽器你就可以訪問保存這樣的命名空間中的JS對象:

(reduce (fn [ns n] (aget ns n)) 
     js/window 
     (clojure.string/split (namespace ::x) #"\.")) 
+1

? – Zubair

+1

@Zubair剛纔檢查和它實際上先進的編譯工作。 – kamituel

1

你可以試試這個

(apply str (drop-last 2 (str `_))) 
3

在宏擴展,您可以訪問&env和檢索:ns鍵這樣的命名空間信息:

(:ns &env) 
(:name (:ns &env)) 

在宏觀前這隻能擴展/編譯時間,而不是在運行時。