프로그래밍 Programming
클로저 10. 함수 만들기 - 이름공간에서 심볼 관리 (1)
문장전달자
2018. 8. 18. 17:01
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