2013-05-20 23 views

cevap

7

Ad alanları Clojure içinde oldukları gibi ClojureScript'te birinci sınıf değildir. İsim alanını çalışma zamanında almanın kesinlikle bir yolu yok. Bazı ClojureScript derleyici içeriğine erişmekten korkmazsanız, bu bilgiyi makro genişleme zamanında elde etmek mümkündür. Bunun için muhtemelen bir API olmalıydı - ama henüz orada değiliz.

+0

Teşekkürler! Ben korkuyordu bu durumda – Zubair

6

Sen :: avantajı cari ad alanında sizin için isim alanlı sembolü oluşturarak alır bu hile ile şimdiki ad, adını alabilirsiniz:

(namespace ::x) 

Muhtemelen bu değeri kullanmak istemiyorum Her şey için, çünkü kod derlenmişse, içsel temsil değişecektir. Sen erişebilir makro genişleme sırasında bu

(apply str (drop-last 2 (str `_))) 
+1

Bu kod kapatma gelişmiş modda derlenmiş olacak mı? – Zubair

+1

@Zubair Kontrol ettik ve aslında gelişmiş derleme ile çalışıyor. – kamituel

1

: Eğer tehlikeli yaşamak istiyorsan, o zaman tarayıcıda sonra böyle ad tutan js nesne erişebilir &env ve bunun gibi :ns anahtarından ad bilgilerini almak:

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

makro eski at Bu, yalnızca Pversion/derleme zamanı ve çalışma zamanında değil.

3

deneyebilirsiniz

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