Я розумію ключові слова в сутності 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
. Виняток Reader видається, якщо foo
не вирішується у просторі імен.
#:
і #::
синтаксис, який використовується разом із картою для вирішення ключових слів всередині карти, як пояснено тут .