Я понимаю ключевые слова в Clojure: ключевое слово. Но для чего: используется? Почему это похоже на привязку?
user=> :foo
:foo
user=> ::foo
:user/foo
Ответ 1
Двойной двоеточие для полного определения ключевых слов с вашим текущим пространством имен. Это позволяет избежать конфликтов имен для ключевых слов, которые имеют смысл для разных библиотек. Без полноценных ключевых слов вы можете случайно перезаписать некоторые значения на карте и нарушить совместимость с библиотекой.
Ответ 2
Это недокументированный, но :: ключевые слова также могут использоваться для разрешения псевдонимов пространства имен. Например, ::foo/bar будет оценивать до :clojure.core/bar, если foo является псевдонимом clojure.core. Исключение чтения исключается, если foo не разрешает пространство имен.