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