2010-08-04 6 views
6

사용할 수있는 네임 스페이스를 가져 오는 관용적 인 방법이 있습니까?clojure 네임 스페이스 가져 오기

(all-ns)은 이미 사용 된 네임 스페이스 만 반환합니다. (Package/getPackages)import에서 사용할 수있는 모든 Java 패키지를 반환하지만 이미 사용 된 Clojure 네임 스페이스 만 반환합니다.

나는 this post을 우연히 발견했지만 클래스 패스 마술을 사용합니다.

내 클래스 패스에 clojure.jar 및 contrib.jar가 있으면 ('clojure.core 'clojure.set ... 'clojure.contrib.accumulators 'clojure.contrib.condition ...)과 같은 것을 얻고 싶습니다. 그러나 아직 아무것도 사용하지 않았습니다.

답변

9

"classpath magic"을 수행해야합니다. 레지스트리가 없으므로 클래스 경로를 탐색하고 모든 클로저 소스 파일을 조사하여 사용 가능한 네임 스페이스를 결정해야합니다. (파일이 AOT로 컴파일되지 않은 경우에는 다른 휴리스틱이 필요합니다.)

링크 된 포스트에서 사용되는 함수가 가장 좋은 방법이라고 생각합니다 : clojure.contrib.find-namespaces/find-namespaces-on-classpath.


Clojure 1.3.0 이후 사용되지 않음. 찾아-네임 스페이스와 clojure.java.classpath/클래스 경로를 내가이 일을위한 훌륭한 도구가 될 bultitude을 발견 http://github.com/clojure/java.classpath

2

에서/이제 clojure.tools.namespace.find 사용합니다.

user=> (require '[bultitude.core :as b]) 
nil 

user=> (take 10 (b/namespaces-on-classpath)) 
(bultitude.core-test bultitude.core clojure.data clojure.string clojure.test clojure.xml clojure.inspector clojure.repl clojure.set clojure.test.junit) 

user=> (b/namespaces-on-classpath :prefix "bultitude") 
(bultitude.core-test bultitude.core) 
+0

내 질문에 완벽하게 일치를 보이는 : 예

관련 문제