갈루아의 반서재

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