Для чого :: використовується в clojure?


83

Я розумію ключові слова в сутності Clojure :keyword. Але для чого ::використовується? Чому здається, що він має палітурку?

user=> :foo
:foo
user=> ::foo
:user/foo

Відповіді:


83

Подвійна двокрапка існує, щоб повністю визначити ключові слова у вашому поточному просторі імен. Це призначено для уникнення зіткнень імен для ключових слів, які мають значення для різних бібліотек. Без повністю кваліфікованих ключових слів ви можете випадково перезаписати деякі значення на карті та порушити сумісність із бібліотекою.


Щодо наданого обгрунтування, не зовсім впевнений, чому в першу чергу можна було б повозити карту, якою для них повинна обробляти бібліотека. Якщо це справді головна мотивація, може допомогти якесь з’ясування.
matanster

3
одним із прикладів може бути кільцеве проміжне програмне забезпечення (подібне до фільтрів сервлетів), за допомогою якого ви можете збагатити карту, що описує запит HTTP. Клавіші з простором імен дозволяють писати власні проміжні програми для додавання додаткових значень, не турбуючись про перешкоди з будь-яким іншим проміжним програмним забезпеченням, налаштованим у вашій програмі дзвінка.
skuro

27

Як тепер зафіксовано як для Clojure, так і для ClojureScript , ::ключові слова також можуть використовуватися для вирішення псевдонімів простору імен. Наприклад, ::foo/barоцінить, :clojure.core/barякщо fooце псевдонім clojure.core. Виняток Reader видається, якщо fooне вирішується у просторі імен.


Ця функція там задокументована - clojure.org/reference/reader#_literals - cljs.github.io/api/syntax/keyword-qualify
maxp

Також актуальним, оскільки Clojure 1.9, є #:і #::синтаксис, який використовується разом із картою для вирішення ключових слів всередині карти, як пояснено тут .
Джо Корнелі,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.