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

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ą.


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.



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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.