[clojure] ::는 클로저에서 무엇을 위해 사용됩니까?

Clojure의 키워드를 이해합니다 :keyword. 그러나 무엇을 위해 ::사용됩니까? 바인딩이있는 것처럼 보이는 이유는 무엇입니까?

user=> :foo
:foo
user=> ::foo
:user/foo



답변

이중 콜론은 현재 네임 스페이스로 키워드를 완전히 한정 하기위한 것입니다. 이는 다른 라이브러리에 의미있는 키워드에 대한 이름 충돌을 방지하기위한 것입니다. 정규화 된 키워드가 없으면 실수로 맵의 일부 값을 덮어 쓰고 라이브러리와의 호환성이 깨질 수 있습니다.


답변

이제 기록으로 Clojure에 대한 뿐만 아니라 ClojureScript 위해 , ::키워드는 해결 네임 스페이스 별칭을 사용할 수 있습니다. 예를 들어 ::foo/bar:clojure.core/barif foo가의 별칭으로 평가됩니다 clojure.core. foo에서 네임 스페이스로 확인 되지 않으면 리더 예외가 발생합니다 .


답변