Clojure의 키워드를 이해합니다 :keyword
. 그러나 무엇을 위해 ::
사용됩니까? 바인딩이있는 것처럼 보이는 이유는 무엇입니까?
user=> :foo
:foo
user=> ::foo
:user/foo
Clojure의 키워드를 이해합니다 :keyword
. 그러나 무엇을 위해 ::
사용됩니까? 바인딩이있는 것처럼 보이는 이유는 무엇입니까?
user=> :foo
:foo
user=> ::foo
:user/foo
답변:
이중 콜론은 현재 네임 스페이스로 키워드를 완전히 한정 하기위한 것입니다. 이는 다른 라이브러리에 의미있는 키워드에 대한 이름 충돌을 방지하기위한 것입니다. 정규화 된 키워드가 없으면 실수로 맵의 일부 값을 덮어 쓰고 라이브러리와의 호환성이 깨질 수 있습니다.
이제 기록으로 Clojure에 대한 뿐만 아니라 ClojureScript 위해 , ::
키워드는 해결 네임 스페이스 별칭을 사용할 수 있습니다. 예를 들어 ::foo/bar
는 :clojure.core/bar
if foo
가의 별칭으로 평가됩니다 clojure.core
. foo
에서 네임 스페이스로 확인 되지 않으면 리더 예외가 발생합니다 .