Ich meine das nicht als subjektive Frage - ich versuche zu verstehen, warum genau with-meta
in der Sprache ist. Ich weiß, dass kann für viele Zwecke verwendet werden (so kann eval
, aber seine Verwendung außerhalb bestimmter Umstände ist ein Zeichen für Bad Design). Aus Sicht des Designs, welcher eindeutige Zweck erfüllt Clojures Metadatenstruktur? Ist es hauptsächlich für die Dokumentation? Ist es Zucker?
Was sind einige starke Anwendungen für with-meta
/ meta
? In welchen Fällen ist es eine schlechte Idee? Können Sie ein Beispiel für die Verwendung von Metadaten geben, um etwas zu tun, das ohne es unmöglich / schwierig / mühsam wäre?
Einige der Kernfunktionen der Sprache hängen von Metadaten ab:
Makros eine Funktion, die von Metadaten abhängt. Ein Makro ist eine Funktion mit ein wenig Metadaten, die bewirkt, dass die Funktion bei Compiletime ausgeführt wird.
%Vor%Typen sind ein weiteres Merkmal der Sprache, das von Metadaten abhängt. Der Typ von etwas wird als Metadaten für dieses Objekt ausgedrückt.
-Tests verwenden auch Metadaten. Wenn Sie run-tests
aufrufen (oder lein), werden die Metadaten der Funktionen in jedem Namespace untersucht, um diejenigen zu finden, bei denen es sich um Tests handelt.
Es gibt viele weitere Fälle, die vom Kern der Sprache wie Typen bis zu peripheren Dingen wie n-repl / cider reichen, die die Funktionsargumente am unteren Bildschirmrand anzeigen, während Sie arbeiten, die Metadaten verwenden. Es ist kein Design-Geruch, um Metadaten zu verwenden, vorausgesetzt, Sie verwenden es nicht, um hässliche Dinge zu tun;)
Tags und Links clojure