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
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:
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
czy foo
jest aliasem clojure.core
. Wyjątek czytnika jest generowany, jeśli foo
nie rozwiązuje problemu z przestrzenią nazw.
#:
i #::
składni, który jest używany razem z mapą w celu rozwiązania kluczowych wewnątrz mapie, jak wyjaśniono tutaj .