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
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ą.
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/bar
oszacuje,:clojure.core/bar
czyfoo
jest aliasemclojure.core
. Wyjątek czytnika jest generowany, jeślifoo
nie rozwiązuje problemu z przestrzenią nazw.źródło
#:
i#::
składni, który jest używany razem z mapą w celu rozwiązania kluczowych wewnątrz mapie, jak wyjaśniono tutaj .