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