Sagen wir, ich habe ein X.clojurescript und einen X.clojure Namespace. Alles in X.clojurescript ist Clojurescript-Code, alles in X.clojure ist Clojure-Code. Leider kann ich keine Makros direkt in Clojurescript definieren, habe ich sie in Clojure definieren und sie dann in ein NamespaceWie gehe ich mit dem erforderlichen Clojurescript-Code von Clojurescript-Makros um?
(ns X.clojurescript.abc
(:require-macros [X.clojure.def :as clj]))
Das ist in Ordnung mit Clojurescript zu bringen. Was aber, wenn das Makro (in X.clojure definiert) auf etwas verweisen muss, das in einem Clojurescript-Namespace (X.clojurescript) definiert ist? Das Problem ist, dass der Clojure-Compiler nicht in meinen Clojurescript-Namespace (ein separates Verzeichnis) schaut, wenn andere Namespaces aufgelöst werden.
Ich habe dieses Problem gelöst, indem ich einfach einen Namespace in meinem Clojure-Code erstelle, der denselben Namespace und die gleiche Definition wie in Clojurescript hat, aber das scheint irgendwie dumm zu sein. Wenn ich zum Beispiel X.clojurescript.abc.y in meinem Makro benötige, erstelle ich einfach einen zusätzlichen Namespace auf der Clojure-Seite, der in meiner Clojure-Version von X.clojurescript.abc ein Dummy-Y enthält; irgendwie dumm.
Wie gehe ich mit einem Makro um, das auf etwas auf der Clojurescript-Seite verweisen muss?
Machen Sie Ihr Makro so, dass es alle erforderlichen Dinge aus Clojurescript als Parameter übernimmt. Wenn Sie etwas Code hinzufügen können, wird es viel einfacher sein, Ihre spezifische Abfrage zu beantworten – Ankur
Ich glaube nicht, dass ich Ihre Frage verstehe. Ihr Makro muss * den Code erzeugen, der dann in Clojurescript ausgewertet wird. Wenn Sie also auf ein beliebiges Clojurescript-Def verweisen müssen, reicht es nicht aus, das Symbol in der Erweiterung des Makros zu erzeugen? – KIMA
'beziehen Sie sich auf etwas auf der Clojurescript-Seite' Sie brauchen das bei der Makroerweiterung oder wird dies etwas sein, das im Ausgabecode ausgegeben wird? – Ankur