Ich verstehe Schlüsselwörter in Clojure :keyword
. Aber wofür wird das ::
verwendet? Warum sieht es so aus, als hätte es eine Bindung?
user=> :foo
:foo
user=> ::foo
:user/foo
Ich verstehe Schlüsselwörter in Clojure :keyword
. Aber wofür wird das ::
verwendet? Warum sieht es so aus, als hätte es eine Bindung?
user=> :foo
:foo
user=> ::foo
:user/foo
Antworten:
Der Doppelpunkt dient dazu, Schlüsselwörter mit Ihrem aktuellen Namespace vollständig zu qualifizieren . Dies soll Namenskonflikte für Schlüsselwörter vermeiden, die für verschiedene Bibliotheken von Bedeutung sind. Ohne vollständig qualifizierte Schlüsselwörter können Sie versehentlich einige Werte in einer Karte überschreiben und die Kompatibilität mit einer Bibliothek beeinträchtigen.
Wie jetzt sowohl für Clojure als auch für ClojureScript dokumentiert , können ::
Schlüsselwörter auch zum Auflösen von Namespace-Aliasnamen verwendet werden. Zum Beispiel ::foo/bar
wird ausgewertet, :clojure.core/bar
ob foo
es sich um einen Alias von handelt clojure.core
. Eine Reader-Ausnahme wird ausgelöst, wenn foo
sie nicht in einen Namespace aufgelöst wird.
#:
und #::
Syntax, die zusammen mit einer Karte verwendet wird , um die Schlüsselwörter zu lösen innerhalb der Karte, wie erläutert hier .