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