728x90
ns 를 이용하여 이름 공간을 새로 만들고 그 이름공간으로 전환할 수 있다.
이제 디폴트 이름공간이 user 에서 alice.favfoods 로 바뀌었음을 알 수 있다.
현재 이름공간을 나타내는 *ns*라는 명령을 통해 이를 확인할 수 있다.
1 2 3 4 5 6 7 8 9 | user=> (ns alice.favfoods) nil alice.favfoods=> alice.favfoods=> *ns* #object[clojure.lang.Namespace 0x44fdc648 "alice.favfoods"] alice.favfoods=> | cs |
여기에서 var 를 정의하면, 그 var 는 직접 접근할 수 있다.
이름공간을 포함하는 완전한 이름인 alice.favfoods/fav-food 를 통해서도 접근은 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 | alice.favfoods=> (def fav-food "strawberry jam") #'alice.favfoods/fav-food alice.favfoods=> alice.favfoods=> fav-food "strawberry jam" alice.favfoods=> alice.favfoods/fav-food "strawberry jam" alice.favfoods=> | cs |
다른 이름공간으로 전환하면 그 심볼은 더 이상 참조되지 않는다.
1 2 3 4 5 6 7 8 9 | alice.favfoods=> (ns rabbit.favfoods) nil rabbit.favfoods=> fav-foods CompilerException java.lang.RuntimeException: Unable to resolve symbol: fav-foods in this context, compiling:(null:0:0) rabbit.favfoods=> | cs |
전환한 다른 이름 공간에서는 그 심볼을 다른 값을 지정하는 var 로 정의할 수 있다.
1 2 3 4 5 6 7 | rabbit.favfoods=> (def fav-foods "lettuce soup") #'rabbit.favfoods/fav-foods rabbit.favfoods=> fav-foods "lettuce soup" rabbit.favfoods=> | cs |
이제 앨리스가 좋아하는 음식을 참조하기 위해서는 이름공간이 포함된 완전한 이름을 사용해야 한다.
1 2 3 4 5 | rabbit.favfoods=> alice.favfoods/fav-food "strawberry jam" rabbit.favfoods=> | cs |
728x90
'프로그래밍 Programming' 카테고리의 다른 글
클로저 12. 제어문 - 기본적인 논리검사 (0) | 2018.08.18 |
---|---|
클로저 11. 함수 만들기 - 이름공간에서 심볼 관리 (2) require (0) | 2018.08.18 |
클로저 09. 함수 만들기 - defn, fn, 그리고 무명함수 (0) | 2018.08.18 |
클로저 08. 심볼과 바인딩 - def, var, let (0) | 2018.08.17 |
클로저 07. 데이터 컬렉션 - 리스트가 핵심 (0) | 2018.08.17 |