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