2010-01-06 4 views
7

clojure 세션에서 이미 정의 된 것을 볼 수있는 방법이 있나요? (ls() 호출과 동일)? 이 전 몇 객체를 생성한다고 가정 해 봅시다 :Clojure 네임 스페이스 : 정의 된 개체를 보는 방법?

(def x 1) 
(def y 2.2) 
(def plus-one (fn [x] (+ x 1))) 

이 이제 사용자 이름 공간에 존재한다는 것을 나에게 보여주기 위해 실행할 수있는 명령이 있나요?

답변

18

사용자 이름 공간에서 모든 할당을하고 있습니다.

user> (def *foo 10) 
#'user/*foo 

; 사용자 이름 공간에서 모든 공용 인턴 매핑을 확인합니다.

user> (ns-publics 'user) 
{*foo #'user/*foo} 

는 이제

user> (defn- foobar[x] 
     (println x) 
#'user/foobar 

는 NS-대중 함수를 호출 공공없는 기능을 정의 할 수 있습니다. 매핑에 foobar 함수가 표시되지 않습니다.

user> (ns-publics 'user) 
{*foo #'user/*foo} 

네임 스페이스에 대한 인턴 매핑을 확인합니다. (네스 인턴의 네임 스페이스)

user> (ns-interns 'user) 
{foobar #'user/foobar, *foo #'user/*foo} 
+0

아, 그래서 그것은'ns-interns'가하는 것입니다! +1하지만 투표에서 벗어났습니다.) –

7

ns-publics?

네임 스페이스에 대한 공용 인턴 매핑의 맵을 반환합니다.

또는 ns-map?

네임 스페이스에 대한 모든 매핑의 맵을 반환합니다. 내가 알고있는 것처럼


, 더 "지구 환경은,"단지 네임 스페이스가 없습니다. 물론 현재 "현재"있는 곳이 실용적인 "지구 환경"과 같습니다.

+0

+1 감사합니다. 매우 도움이됩니다. – Shane