Do czego służy :: używane w clojure?

83

Rozumiem słowa kluczowe w Clojure :keyword. Ale do czego ::służy? Dlaczego wygląda na to, że ma wiązanie?

user=> :foo
:foo
user=> ::foo
:user/foo
carinmeier
źródło

Odpowiedzi:

83

Podwójny dwukropek służy do pełnego kwalifikowania słów kluczowych w bieżącej przestrzeni nazw. Ma to na celu uniknięcie kolizji nazw słów kluczowych, które mają znaczenie dla różnych bibliotek. Bez w pełni kwalifikowanych słów kluczowych można przypadkowo nadpisać niektóre wartości w mapie i przerwać zgodność z biblioteką.

skuro
źródło
Jeśli chodzi o podane uzasadnienie, nie do końca jestem pewien, dlaczego w pierwszej kolejności majstrowałoby się przy mapie, którą ma dla nich obsługiwać biblioteka. Jeśli to naprawdę główna motywacja, pomocne może być wyjaśnienie.
matanster
3
jednym z przykładów może być pierścieniowe oprogramowanie pośredniczące (podobne do filtrów serwletów), za pomocą którego można wzbogacić mapę opisującą żądanie HTTP. Klucze w przestrzeniach nazw umożliwiają pisanie niestandardowego oprogramowania pośredniego w celu dodawania dodatkowych wartości bez obawy o zakłócenia z jakimkolwiek innym oprogramowaniem pośrednim skonfigurowanym w aplikacji pierścienia.
skuro
27

Jak zostało to udokumentowane dla Clojure, jak również dla ClojureScript , ::słowa kluczowe mogą być również używane do rozpoznawania aliasów przestrzeni nazw. Na przykład ::foo/baroszacuje, :clojure.core/barczy foojest aliasem clojure.core. Wyjątek czytnika jest generowany, jeśli foonie rozwiązuje problemu z przestrzenią nazw.

Shaun Lebron
źródło
Również istotne, ponieważ Clojure 1.9, to #:i #::składni, który jest używany razem z mapą w celu rozwiązania kluczowych wewnątrz mapie, jak wyjaśniono tutaj .
Joe Corneli